С#: Получить параметр типа во время выполнения, чтобы перейти в общий метод
Общий метод...
public void PrintGeneric2<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
Я вызываю это из Main()...
Type t = test2.GetType();
PrintGeneric2<t>(test2);
Я получаю ошибку "CS0246: имя типа или пространства имен" t "не может быть найдено" и "CS1502: лучший перегруженный метод соответствует DoSomethingClass.PrintGeneric2 <t> (T) имеет недопустимые аргументы"
Это связано с моим предыдущим вопросом здесь: С#: Передача универсального объекта
Я читал, что общий тип не может быть определен во время выполнения, без использования рефлексии или методаinfo, но я не совсем понимаю, как это сделать в этом случае.
Спасибо, если вы можете просветить меня =)
Ответы
Ответ 1
Если вы действительно хотите вызвать общий метод, используя параметр типа, неизвестный во время компиляции, вы можете написать что-то вроде:
typeof(YourType).GetMethod("PrintGeneric2").MakeGenericMethod(t).Invoke(instance, new object[] { test2 } );
Однако, как указано в других ответах, Generics может быть не лучшим решением в вашем случае.
Ответ 2
Generics предлагает параметрический полиморфизм Компиляция времени. Вы пытаетесь использовать их с типом, указанным только в Runtime.
Короткий ответ: он не сработает, и у него нет причин (кроме отражения, но это совсем другой зверь).
Ответ 3
Просто позвоните:
PrintGeneric2(test2);
Компилятор выведет <t>
из того, что вы передаете.