c# - 如果方法的最后一个参数标记为 'params',反射是否会暴露?

标签 c# reflection

在方法定义上使用反射我想查明原始方法是否在最后一个参数上使用“params”定义。那么我能不能发现原来的定义是不是这样的……

public void MyMethod(int x, params object[] args);

...不是这个...

public void MyMethod(int x, object[] args);

我的代码有一个参数列表,并使用反射来调用任意方法。如果它标有'params'那么我想将额外的参数打包到一个对象[]中并调用该方法。如果参数未标记为“params”,那么我会指示错误。所以我想提供与 C# 相同的语义。

但我找不到任何指示如何使用反射发现它的文档。

最佳答案

使用ParamArrayAttribute属性

class Program
{
    public void MethodWithParams(object param1, params int[] param2) 
    {            
    }

    static void Main(string[] args)
    {
        var method = typeof(Program).GetMethod("MethodWithParams");
        var @params = method.GetParameters();
        foreach (var param in @params) 
        {
            Console.WriteLine(param.IsDefined(typeof(ParamArrayAttribute), false));
        }
    }
}

关于c# - 如果方法的最后一个参数标记为 'params',反射是否会暴露?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/252656/

相关文章:

c# - ASP.NET : Filter unique rows from Data table

c# - 使用反射确定c#中某个类型使用的所有类型

scala - 如何在编译时使用反射

c# - 如何在 C# 中将 IEnumerable<T> 列表转换为数据表

c# - 如何在 C# 中将 DataTable 转换为字符串?

c# - IApplicationBuilder 不包含定义 MapSignalR()。 app.MapSignalR() 不适用于 ASP.NET CORE

关于 serviceloader 的 Java 9 依赖问题

c# - 如何释放通过Reflection加载的DLL?

c# - 删除字符串变量中存储的值的最后两个字符

c# - 在 C# 中定义集合访问器时如何避免堆栈溢出错误