7
votes

Comment détecter s'il s'agit d'un objet de type générique et de couler sur le type requis?

J'ai une méthode d'extension pour convertir une liste générique en chaîne. xxx pré>

J'ai un objet qui est d'objet de type qui contient une liste; La liste pourrait être list code>, list code>, list code> tout type de liste. P>

Y a-t-il un moyen de détecter que cet objet est une liste générique et de lancer ce type de liste générique spécifique pour appeler la méthode converttostring code>? P>

//ignore whats happening here
//just need to know its an object which is actually a list
object o = new List<int>() { 1, 2, 3, 4, 5 };

if (o is of type list)
{
    string value = (cast o to generic type).ConvertToString();
}


0 commentaires

3 Réponses :


6
votes

vous peut atteindre cela, avec beaucoup de réflexion (les deux pour trouver le bon t , puis pour appeler via makegenericmethod etc.); Cependant: vous n'êtes pas en utilisant les fonctionnalités génériques, alors supprimez-les! (ou avoir une API secondaire non générique): xxx

et xxx

(vous pouvez également utiliser ienumerable Dans l'étape ci-dessus, mais vous devez faire attention avec string etc. si vous faites cela)


0 commentaires

2
votes

Au lieu de coder la méthode de l'extension contre ilist , vous pouvez le signaler contre iEnumerable, alors ce serait: xxx

alors vous pouvez vérifier si o est un iEnumerable: xxx


0 commentaires

0
votes

Utiliser System.Type Pour voir si votre type est un tableau (isarray) et s'il s'agit d'un type générique (isgénérictype)


1 commentaires

Une liste n'est pas un tableau; qui n'aident pas non plus l'op trouver le t ou invoquer la méthode