Да
if (typeof(T) == typeof(MyClass))
{
MyClass mc = (MyClass)(object) t;
}
else if (typeof(T) == typeof(List<MyClass>))
{
List<MyClass> lmc = (List<MyClass>)(object) t;
}
Немного странно, что вам нужно пройти приведение к объекту, но именно так работают дженерики - не так много преобразований из дженерического типа, как вы могли бы ожидать.
Конечно, другой альтернативой является использование обычной проверки времени выполнения:
MyClass mc = t as MyClass;
if (mc != null)
{
// ...
}
else
{
List<MyClass> lmc = t as List<MyClass>;
if (lmc != null)
{
// ...
}
}
Это будет вести себя иначе, чем первый блок кода, если t
, конечно, равно нулю.
Я бы попытался избегать такого рода кода, где это возможно, однако - иногда это может быть необходимо, но идея универсальных методов заключается в том, чтобы иметь возможность писать универсальный код, который работает одинаково для любого типа.