@@ -249,7 +249,22 @@ static bool TryGetInvokeArguments(ParameterInfo[] parameters, string?[] args, in
249249 var v = value . Value ;
250250 if ( ! ( v . StartsWith ( "[" ) && v . EndsWith ( "]" ) ) )
251251 {
252- v = "[" + v + "]" ;
252+ var elemType = UnwrapCollectionElementType ( parameters [ i ] . ParameterType ) ;
253+ if ( elemType == typeof ( string ) )
254+ {
255+ if ( ! ( v . StartsWith ( "\" " ) && v . EndsWith ( "\" " ) ) )
256+ {
257+ v = "[" + string . Join ( "," , v . Split ( ' ' ) . Select ( x => "\" " + x + "\" " ) ) + "]" ;
258+ }
259+ else
260+ {
261+ v = "[" + v + "]" ;
262+ }
263+ }
264+ else
265+ {
266+ v = "[" + string . Join ( "," , v . Trim ( '\' ' , '\" ' ) . Split ( ' ' ) ) + "]" ;
267+ }
253268 }
254269 try
255270 {
@@ -284,7 +299,12 @@ static bool TryGetInvokeArguments(ParameterInfo[] parameters, string?[] args, in
284299 }
285300 else
286301 {
287- errorMessage = "Required parameter \" " + item . Name + "\" " + " not found in argument." ;
302+ var name = item . Name ;
303+ if ( option ? . ShortName != null )
304+ {
305+ name = item . Name + "(" + "-" + option . ShortName + ")" ;
306+ }
307+ errorMessage = "Required parameter \" " + name + "\" " + " not found in argument." ;
288308 return false ;
289309 }
290310 }
@@ -293,6 +313,24 @@ static bool TryGetInvokeArguments(ParameterInfo[] parameters, string?[] args, in
293313 return true ;
294314 }
295315
316+ static Type ? UnwrapCollectionElementType ( Type collectionType )
317+ {
318+ if ( collectionType . IsArray )
319+ {
320+ return collectionType . GetElementType ( ) ;
321+ }
322+
323+ foreach ( var i in collectionType . GetInterfaces ( ) )
324+ {
325+ if ( i . IsGenericType && ( i . GetGenericTypeDefinition ( ) == typeof ( IEnumerable < > ) ) )
326+ {
327+ return i . GetGenericArguments ( ) [ 0 ] ;
328+ }
329+ }
330+
331+ return null ;
332+ }
333+
296334 static ReadOnlyDictionary < string , OptionParameter > ParseArgument ( string ? [ ] args , int argsOffset )
297335 {
298336 var dict = new Dictionary < string , OptionParameter > ( args . Length , StringComparer . OrdinalIgnoreCase ) ;
0 commit comments