2

次のようなパラメータを取得するメソッドがあります。

public void Foo(ref Action<string> bar);

Cecilを使用してパラメーターを列挙すると、ByReferenceTypeが生成されます。パラメータを逆参照しようとしてGetElementType()を呼び出すと、フルネームのTypeReferenceが返されます。

System.Action`1

どういうわけか、それはジェネリックパラメータを失い、もはやGenericInstanceTypeではありません。

byrefパラメーターを適切に逆参照して、実際の汎用インスタンスタイプを取得するにはどうすればよいですか?

4

1 に答える 1

2

これを使用してTypeSpecに飛び込むことができます(もちろん、自分が何を求めているかがわかっている場合は、TypeSpecを短くすることができます)。

ParameterDefinition parameter = ...;
ByReferenceType byref = (ByReferenceType) parameter.ParameterType;
GenericInstanceType action_string = (GenericInstanceType) byref.ElementType;
TypeReference action = action_string.ElementType;
TypeReference str = action_string.GenericArguments [0];

GetElementTypeメソッドは、TypeSpecの作成元の元の要素タイプを返します。

于 2011-05-16T11:06:38.420 に答える