我怎么知道参数使用ref或params修饰符?

时间:2015-08-19 17:59:45

标签: c# mono.cecil

在Mono.Cecil中,ParameterDefinition参数的out将其属性svn cleanup . --remove-unversioned设置为IsOut

refparams怎么样?如何从true确定其中一个修饰符用于方法参数?

1 个答案:

答案 0 :(得分:3)

虽然ParameterDefinition不包含IsRefIsParams,但很容易从其他两个属性中确定。

当参数包含ref修饰符时,ParameterDefinition.ParameterType.IsByReference的值为true。否则,它是false,即使实际参数是引用类型。

至于paramsCustomAttributes集合包含与System.ParamArrayAttribute对应的元素。

以下代码说明了如何确定四种状态:

using System;
using System.Linq;
using Mono.Cecil;

...

if (definition.IsOut)
{
    // There is an `out` modifier.
}
else if (definition.ParameterType.IsByReference)
{
    // There is a `ref` modifier.
}
else if (definition.CustomAttributes.Any(attribute => 
    attribute.AttributeType.FullName == typeof(ParamArrayAttribute).FullName))
{
    // There is a `params` modifier.
}
else
{
    // There are no modifiers.
}