Skip to content

Commit 78f24d1

Browse files
committed
避免创建字典的 Keys 的集合
1 parent f5978d6 commit 78f24d1

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/DotNetCampus.CommandLine/CommandRunner.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class CommandRunner : ICommandRunnerBuilder, IAsyncCommandRunnerBuilder
2121
private readonly bool _supportsPascalCase;
2222
private FactoryAndRunner? _defaultFactory;
2323
private CommandObjectFactory? _fallbackFactory;
24+
private int _maxCommandLength;
2425

2526
internal CommandRunner(CommandLine commandLine)
2627
{
@@ -123,7 +124,7 @@ public async Task<CommandRunningResult> RunAsync()
123124
{
124125
if (_factories.Count > 0)
125126
{
126-
var maxLength = _factories.Keys[0].Length;
127+
var maxLength = _maxCommandLength;
127128
var header = _commandLine.GetHeader(maxLength);
128129

129130
foreach (var (command, factory) in _factories)
@@ -159,14 +160,15 @@ internal CommandRunner AddHandlerCore(NamingPolicyNameGroup command, CommandObje
159160
{
160161
if (_supportsOrdinal)
161162
{
162-
if (command.Ordinal is { } ordinal && !string.IsNullOrWhiteSpace(ordinal))
163+
if (command.Ordinal is { } ordinal && !string.IsNullOrEmpty(ordinal))
163164
{
164165
// 包含命令名称。
165166
var isAdded = _factories.TryAdd(ordinal, (factory, runner));
166167
if (!isAdded)
167168
{
168169
throw new CommandNameAmbiguityException($"The command '{ordinal}' is already registered.", ordinal);
169170
}
171+
_maxCommandLength = Math.Max(_maxCommandLength, ordinal.Length);
170172
}
171173
else
172174
{
@@ -180,7 +182,7 @@ internal CommandRunner AddHandlerCore(NamingPolicyNameGroup command, CommandObje
180182
}
181183
if (_supportsPascalCase)
182184
{
183-
if (command.PascalCase is { } pascal && !string.IsNullOrWhiteSpace(pascal))
185+
if (command.PascalCase is { } pascal && !string.IsNullOrEmpty(pascal))
184186
{
185187
// 包含命令名称。
186188
var isAdded = _factories.TryAdd(pascal, (factory, runner));
@@ -189,6 +191,7 @@ internal CommandRunner AddHandlerCore(NamingPolicyNameGroup command, CommandObje
189191
// 转换的名称,之后在仅用转换名称时才需要抛出异常;否则很可能前面已经添加了一个相同的名称。
190192
throw new CommandNameAmbiguityException($"The command '{pascal}' is already registered.", pascal);
191193
}
194+
_maxCommandLength = Math.Max(_maxCommandLength, pascal.Length);
192195
}
193196
else
194197
{

0 commit comments

Comments
 (0)