Как я могу получить универсальный тип класса в dnlib?

У меня есть следующий класс:

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> в конце.

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);
Другие вопросы по тегам