1

私は次のクラスを持っています:

public class MyGenericArray<T>
{
    private T[] array;

    public MyGenericArray(int size)
    {
        array = new T[size + 1];
    }

    public T getItem(int index)
    {
        var in2 = index + 1;
        in2 = index - in2;
        index = index + 1 - in2 - 1;
        return array[index];
    }
}

dnlibを使用して、cil コード レベルでいくつかの変更を行います。メソッド内で、パラメーターgetItem()のクラス型を取得したい.thisldarg.0

私はparam.Typeを探しています

param = ((Parameter)_instruction.Operand);

利用可能なすべてのフィールドを検索しましたが、見つかりませんでした。実際、私が得るのは

 ConsoleCalculator.BasicTests/MyGenericArray`1

そして、私は見つけることを期待しています

 ConsoleCalculator.BasicTests/MyGenericArray`1<!T>

が欠落している理由がわかりません<!T>

フィールドprivate T[] array;の場合、クラスは正しく表示さ<!T>れ、最後に があります。

4

1 に答える 1

1
GenericVar[] genArgs = new GenericVar[typeDef.GenericParameters.Count];
        for (int i = 0; i < genArgs.Length; i++)
            genArgs[i] = new GenericVar(i);

GenericInstSig genericInstanceType = new GenericInstSig((ClassOrValueTypeSig) methodDef.DeclaringType.ToTypeSig(), genArgs);
于 2016-11-16T08:45:54.293 に答える