我怎么知道一个参数使用ref或参数修饰符

本文关键字:参数 ref 一个 我怎么知道 | 更新日期: 2023-09-27 18:08:41

Cecil, out参数的ParameterDefinition属性IsOut设置为true

refparams呢?我如何确定,从ParameterDefinition,其中一个修饰符被用于方法参数?

我怎么知道一个参数使用ref或参数修饰符

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

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

对于params, CustomAttributes集合包含一个与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.
}