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()方法内部,我想获取this参数的类类型,ldarg.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 回答