public string GetValue(ValueArgument argument)
 {
     return
         (argument
          .Options
          .Select(o => FindValue(o, argument))
          .FirstOrDefault(value => value != null)
          ?? argument.DefaultValue);
 }
 public T?GetValue <T>(ValueArgument <T> argument)
     where T : struct
 {
     return(SafeConvertTo <T>(GetValue(argument as ValueArgument))
            ?? argument.DefaultValue);
 }