【发布时间】:2013-04-26 15:42:04
【问题描述】:
我在这里遗漏了一些琐碎的事情。假设我有这样的方法:
abstract class C
{
public static void M(Type t, params int[] i)
{
}
}
我正在学习表达式树,我需要构建一个调用此方法的委托带有一些预定义的参数。问题是我不知道选择正确的重载并传递Expression.Call的参数。
我想实现这个:
//I have other overloads for M, hence I need to specify the type of arugments
var methodInfo = typeof(C).GetMethod("M", new Type[] { typeof(Type), typeof(int[]) });
//this is the first argument to method M, not sure if I have chosen the right expression
var typeArgumentExp = Expression.Parameter(someType);
var intArrayArgumentExp = Enumerable.Repeat(Expression.Constant(0), 3);
var combinedArgumentsExp = new Expression[] { typeArgumentExp }.Concat(intArrayArgumentExp);
var call = Expression.Call(methodInfo, combinedArgumentsExp);
在Expression.Call 行我得到:
“System.ArgumentException”类型的未处理异常发生在 System.Core.dll
附加信息:提供的参数数量不正确 调用方法 'Void M(System.Type, Int32[])'
我哪里做错了?
【问题讨论】:
标签: c# expression-trees argumentexception