我怎么知道参数使用 ref 或 params 修饰符?
How do I know that a parameter uses ref or params modifier?
在 Mono.Cecil 中,ParameterDefinition
of an out
参数的 属性 IsOut
设置为 true
。
虽然 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.
}
在 Mono.Cecil 中,ParameterDefinition
of an out
参数的 属性 IsOut
设置为 true
。
虽然 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.
}