Как я могу получить универсальный тип класса в 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);