21. februar 2011 - 22:29Der er
36 kommentarer og 1 løsning
List<T> find hvilken type T er, men hvordan?
Jeg har noget kode fx. List<Customer>. Jeg har lavet en metode fx:
public T ProcessPersons<T>(string foo){ //Jeg vil gerne kunne se at min T indholder en liste af Customer. Hvordan kan jeg se object typen Customer? Har forsøgt med noget a la Type a = typeof(T).GetType(); ///men får ikke 'Customer' ud i a
}
Kald af metode:
var a = ProcessPersons<List<Customer>("et eller andet argument")
Dette burde virke: if (type.GetGenericTypeDefinition() == typeof(List<>).GetGenericTypeDefinition()) { Console.WriteLine(type.GetGenericTypeDefinition()); Console.WriteLine("Its a list"); }
Tja, der er flere måder at tjekke for list type på, men det kommer også lidt an på hvad du gerne vil finde ud af? F.eks. kunne du jo spørge ad om den implementerede IList eller IEnumerable? Eller noget i stil med:
Hehe, nej, jeg skulle også gerne nominere Arne_v til MVP. Men nu er der ikke penge eller noget som helst ud i det ... udover titelen. Gratis adgang til MVP Summit, men du skal selv betale Hotel og rejse.
Så MVP er bare for at blive mere kendt i IT-Samfundet ... andet synes jeg ikke rigtig det giver MVP'erne.
btw.. det er faktisk ikke generics du sådan arbejder med :), det er mere en tilnærmet følelse af at bruge det magiske T, men uden rigtigt at være på, hvis du forstår :)
public T ProcessPersons<T>(string foo){
Kan lige så nemt klares med : public object ProcessPersons(object myO, string foo)
Det giver ikke den store mening at oversætte typen i metoden og herefter gøre noget.
Hvis du har en type af Customer, lad os også sige du har et interface på den så:
public T ProcessPersons<T>(string foo) where T:ICustomer { ...
Okay... det var bare ikke lige til at se det ud fra dit eksempel, men tiptop :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.