Oui :
if (typeof(T) == typeof(MyClass))
{
MyClass mc = (MyClass)(object) t;
}
else if (typeof(T) == typeof(List<MyClass>))
{
List<MyClass> lmc = (List<MyClass>)(object) t;
}
Il est un peu étrange que vous deviez passer par une conversion en objet, mais c'est ainsi que fonctionnent les génériques - il n'y a pas autant de conversions à partir d'un type générique qu'on pourrait le penser.
Bien entendu, une autre solution consiste à utiliser le contrôle normal du temps d'exécution :
MyClass mc = t as MyClass;
if (mc != null)
{
// ...
}
else
{
List<MyClass> lmc = t as List<MyClass>;
if (lmc != null)
{
// ...
}
}
Cela se comportera différemment du premier bloc de code si t
est nul, bien sûr.
Je voudrais essayez d'éviter ce type de code dans la mesure du possible, cependant - cela peut être nécessaire parfois, mais l'idée des méthodes génériques est d'être en mesure d'écrire Générique qui fonctionne de la même manière pour tous les types.