@@ -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