76 {
77 Type parameterType = parameter.ParameterType;
78 bool isOptional = parameter.IsOptional;
79 object defaultValue = parameter.DefaultValue;
80 string text =
$"required action parameter #{parameter.Position - 2} '{parameter.Name}'";
81 if (parameterType == typeof(string))
82 {
84 if (isOptional)
85 {
86 ConstantExpression ifTrue = Expression.Constant(defaultValue, typeof(string));
87 return Expression.Condition(test, ifTrue, expr);
88 }
89 string value = "#drama " + text + " cannot be empty";
90 UnaryExpression ifTrue2 = Expression.Throw(Expression.New(
_argumentException, Expression.Constant(value)), typeof(
string));
91 return Expression.Condition(test, ifTrue2, expr);
92 }
94 if (tryParseMethod == null)
95 {
96 throw new NotSupportedException("#drama type '" + parameterType.Name + "' does not have a public static TryParse method");
97 }
98 ParameterExpression parameterExpression = Expression.Variable(parameterType, "parsed");
99 Expression test2 = Expression.Call(tryParseMethod, expr, parameterExpression);
100 Expression expression;
101 if (isOptional)
102 {
103 expression = Expression.Constant(defaultValue, parameterType);
104 }
105 else
106 {
107 string value2 = "#drama can't parse " + text + " to type '" + parameterType.Name + "'";
108 expression = Expression.Throw(Expression.New(
_argumentException, Expression.Constant(value2)), parameterType);
109 }
110 ConditionalExpression conditionalExpression = Expression.Condition(Expression.Call(
_stringIsNullOrEmpty, expr), expression, Expression.Condition(test2, parameterExpression, expression));
111 return Expression.Block(new ParameterExpression[1] { parameterExpression }, conditionalExpression);
112 }
static readonly ConstructorInfo _argumentException
static readonly MethodInfo _stringIsNullOrEmpty
static MethodInfo GetTryParseMethod(Type type)