2015-08-19 58 views

回答

2

雖然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. 
}