在C#中使用反射确定参数是否使用了“params”?

29

请考虑以下方法签名:

public static void WriteLine(string input, params object[] myObjects)
{
    // Do stuff.
}

我怎样才能确定WriteLine方法的"myObjects"参数使用params关键字并且可以接受可变参数?


6
这与 https://dev59.com/NUXRa4cB1Zd3GeqPtaj3 有什么不同? - Ruben Bartelink
3个回答

42

检查参数上是否存在 [ParamArrayAttribute]

带有params关键字的参数将始终是最后一个参数。


21

如果应用了ParamArrayAttribute,请检查ParameterInfo

static bool IsParams(ParameterInfo param)
{
    return param.GetCustomAttributes(typeof (ParamArrayAttribute), false).Length > 0;
}

3
如果你只想检查自定义属性是否存在,但不需要实际的属性实例,则使用 IsDefined 比使用 GetCustomAttributes 更有效率。 - stakx - no longer contributing

14

稍微更短且更易读的方式:

static bool IsParams(ParameterInfo param)
{
    return param.IsDefined(typeof(ParamArrayAttribute), false);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接