2010-05-10 3 views
2

ceci est ma méthode: GetListItemsPainted<T>(List<T> list) et je ne sais pas quel type est cette liste de,Puis-je obtenir le type générique d'un objet?

comment puis-je créer une nouvelle liste qui aurait le type de liste passé?

quelque chose comme ceci:

List<list.GetType()> newList = new List<list.GetType()>(); 

comment puis-je jeter ma liste au type réel donc j'aurais toutes ses propriétés, etc.?

grâce

Répondre

1

Vous ne devez pas créer une nouvelle liste, vous en avez déjà un.

Si vous avez besoin d'un type spécifique, contraignez vos paramètres de type générique avec un whereconstraint

Si vous avez l'intention de réagir à une grande variété de types arbitraires, ce qui est une mauvaise décision de conception à mon avis, vous devra utiliser un conditionnel avec .Cast<T>()

quelque chose comme:

Type myListType = list.GetType().GetGenericArguments()[0]; 
// or Type myListType = typeof(T); as stated by Kobi 
if(myListType == typeof(SomeArbitraryType)) 
{ 
    var typedList = list.Cast<SomeArbitraryType>(); 
    // do something interesting with your new typed list. 
} 

Mais encore une fois, j'envisager d'utiliser une contrainte.

+0

merci, il était très halpfull – dubi

+1

@dubi - si elle a fourni les conseils nécessaires, vous devez cliquer sur la coche. –

10

Vous pouvez créer une liste à l'aide T:

List<T> newList = new List<T>(); 

Si vous devez obtenir le type, vous pouvez utiliser typeof. Ceci est similaire à ce que vous avez demandé, mais a d'autres utilisations, vous n'avez pas besoin pour produire des génériques travail:

Type myType = typeof(T); 
Questions connexes