我怎么知道一个参数使用ref或参数修饰符
本文关键字:参数 ref 一个 我怎么知道 | 更新日期: 2023-09-27 18:08:41
Cecil, out
参数的ParameterDefinition
属性IsOut
设置为true
。
ref
和params
呢?我如何确定,从ParameterDefinition
,其中一个修饰符被用于方法参数?
虽然ParameterDefinition
不包含IsRef
或IsParams
,但很容易从其他两个属性中确定它们。
当参数中包含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.
}