@@ -20,7 +20,9 @@ public class CommandArgument<T> : CommandArgument, IInternalCommandParamOfT
2020 {
2121 private readonly List < T > _parsedValues = new List < T > ( ) ;
2222 private readonly IValueParser < T > _valueParser ;
23- private T _defaultValue ;
23+ private bool _hasBeenParsed ;
24+ private bool _hasDefaultValue ;
25+ private T ? _defaultValue ;
2426
2527 /// <summary>
2628 /// Initializes a new instance of <see cref="CommandArgument{T}" />
@@ -30,36 +32,53 @@ public CommandArgument(IValueParser<T> valueParser)
3032 {
3133 _valueParser = valueParser ?? throw new ArgumentNullException ( nameof ( valueParser ) ) ;
3234 UnderlyingType = typeof ( T ) ;
33- SetBaseDefaultValue ( default ) ;
3435 }
3536
3637 /// <summary>
3738 /// The parsed value.
3839 /// </summary>
39- public T ParsedValue => _parsedValues . FirstOrDefault ( ) ;
40+ public T ParsedValue => ParsedValues . FirstOrDefault ( ) ;
4041
4142 /// <summary>
4243 /// All parsed values;
4344 /// </summary>
44- public IReadOnlyList < T > ParsedValues => _parsedValues ;
45+ public IReadOnlyList < T > ParsedValues
46+ {
47+ get
48+ {
49+ if ( ! _hasBeenParsed )
50+ {
51+ ( ( IInternalCommandParamOfT ) this ) . Parse ( CultureInfo . CurrentCulture ) ;
52+ }
53+
54+ if ( _parsedValues . Count == 0 && _hasDefaultValue )
55+ {
56+ return new [ ] { DefaultValue } ;
57+ }
58+
59+ return _parsedValues ;
60+ }
61+ }
4562
4663 /// <summary>
4764 /// The default value of the argument.
4865 /// </summary>
49- public new T DefaultValue
66+ public new T ? DefaultValue
5067 {
5168 get => _defaultValue ;
5269 set
5370 {
71+ _hasDefaultValue = value != null ;
5472 _defaultValue = value ;
5573 SetBaseDefaultValue ( value ) ;
5674 }
5775 }
5876
5977 void IInternalCommandParamOfT . Parse ( CultureInfo culture )
6078 {
79+ _hasBeenParsed = true ;
6180 _parsedValues . Clear ( ) ;
62- foreach ( var t in Values )
81+ foreach ( var t in base . _values )
6382 {
6483 _parsedValues . Add ( _valueParser . Parse ( Name , t , culture ) ) ;
6584 }
@@ -79,5 +98,13 @@ void SetBaseDefaultValue(T value)
7998 }
8099 }
81100 }
101+
102+ /// <inheritdoc />
103+ public override void Reset ( )
104+ {
105+ _hasBeenParsed = false ;
106+ _parsedValues . Clear ( ) ;
107+ base . Reset ( ) ;
108+ }
82109 }
83110}
0 commit comments