c# - 调用可变参数方法

标签 c# .net reflection variadic-functions

如何使用反射调用可变参数方法?就像这个:

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/

相关文章:

Java的多种接口(interface)和反射

c# - 无法理解带有可选参数的方法的输出

.net - F# 泛型函数

.net - Visual Studio 忽略 MSBuild 文件 (csproj) 自定义

c# - Dotfuscator 中反射错误的解决方法?

c# - 由于回发而未存储变量

c# - 如何将值从一个属性复制到同一对象中的另一个属性?

c# - 如何在C#中调用泛型重载方法

c# - 下拉菜单始终处于事件状态并显示

Java getMethods() 与继承层次结构相关