如何使用反射调用可变参数方法?就像这个:
public static void ArgsMethod(__arglist)
{
ArgIterator ai = new ArgIterator(__arglist);
while(ai.GetRemainingCount() > 0)
{
Console.WriteLine(TypedReference.ToObject(ai.GetNextArg()));
}
}
typeof(Program).GetMethod("ArgsMethod").Invoke(null,new object[0])
抛出 NotSupportedException。
最佳答案
由于 RuntimeMethodInfo
根本不支持这一点(如果方法的调用约定是 VarArgs
,它会明确检查并抛出),您必须编写一个包装器它采用常规 Object[]
,生成用于调用该方法的 IL,并调用它。 ILGenerator
确实通过 EmitCall
支持可变参数方法。 MSDN 甚至有足够的帮助 a sample that demonstrates this exact scenario .
当然,这不是很方便,但是关于 varargs 什么都不是,真的。
关于c# - 调用可变参数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319926/