我正在对用户输入进行一些解析,在这里我需要解析应该是特定类型的参数数组。
在解析的那一刻,我不知道每个参数应该是哪个类型,但它可以被评估为任何类型。所以,我决定将它们临时存储在一个对象数组中。但是当我尝试做这样的事情时:
NewArrayExpression returnValue = Expression.NewArrayInit(typeof(object), expressionList);
我得到以下异常:“System.Int32”类型的表达式不能用于初始化“System.Object”类型的数组。
也就是说,我想,因为没有发生隐式装箱。所以我自己装箱:
expressionList.Add(Expression.TypeAs(expression, typeof(object))); or
expressionList.Add(Expression.Convert(expression, typeof(object)));
到目前为止一切顺利:我得到了数组中各种类型的对象列表。
但是,当我最终获得所需的类型时,我尝试将所有值从上部数组转换为该类型(假设该类型通常是 int)我将其转换:
Expression.Convert(expr, typeof(int)); or
Expression.Unbox(expr, typeof(int));
当 expr 实际上是字符串“aaaaa”时,这是两个命令的调试视图:
(System.Int32)((System.Object)"aaaaa")
现在,这是我的问题:这不会引发异常。但它会在最终编译表达式时。我的意思是,字符串不是整数。
也许这真的不应该抛出异常,我不知道。但这对我不起作用。
有办法治愈吗?
编辑:代码如下所示:
static Expression InArguments(ParameterExpression pe, string[] arguments)
{
List<Expression> listaExpr = new List<Expression>();
foreach (string s in arguments)
{
Expression expression = Complete(pe, s); // evaluate argument
// listaExpr.Add(Expression.Convert(expression, typeof(object)));
}
return Expression.NewArrayInit(typeof(object), listaExpr);
}