2010-07-20 9 views
6

Eventuali duplicati:
How can I get generic Type from a string representation?Come ottenere il tipo di lista <String> in C#?

Come posso ottenere il tipo di "List<String>" in C# utilizzando Type.GetType()?

ho già provato:

Type.GetType("List<String>"); 
Type.GetType("System.Collections.Generic.List.String"); // Or [String] 

Nota che non posso usare typeof in quanto il valore sto ottenendo il tipo di è una stringa.

+0

nota che per ottenere parentesi angolari da mostrare nei paragrafi di testo, è necessario utilizzare virgolette per la formattazione come codice (come ho appena modificato in). – AakashM

+0

Dai un'occhiata alla seguente domanda: http://stackoverflow.com/questions/557340/c-generic-list-t-how-to-get-the-type-of-t – Peanut

risposta

18

Non si può ottenere da "List<String>", ma si può ottenere da Type.GetType:

Type type = Type.GetType("System.Collections.Generic.List`1[System.String]"); 

In questo caso siete fortunati: sia List<T> sia string sono in mscorlib, quindi non è stato necessario specificare gli assembly.

La parte `1 specifica il di tipo del tipo: che ha un parametro di tipo. Il bit tra parentesi quadre specifica gli argomenti di tipo.

Da dove viene il numero List<String>? Puoi cambiare i tuoi requisiti? Sarà più semplice dell'analisi della stringa, della posizione in cui si trovano i parametri del tipo, della ricerca di tipi in spazi dei nomi e assiemi diversi, ecc. Se lavori in un contesto limitato (ad esempio, devi solo supportare un gruppo noto di tipi) potrebbe essere più facile codificare alcuni dei dettagli.

+0

@Downvoter: ti interessa spiegare cosa non ti è piaciuto? –

+0

Giorgi ha dato la tua stessa risposta 4 minuti prima di te. – onof

+0

@onof: No, non l'ha fatto. Ha dato una risposta mostrando solo 'typeof', che ha poi modificato quando l'OP ha spiegato che aveva bisogno di ottenere il tipo solo dalla stringa. Stavo scrivendo la mia risposta mentre Giorgi stava modificando il suo. Non puoi vedere la modifica perché era nei primi 5 minuti, ma ovviamente era lì, o il commento dell'OP non avrebbe avuto senso. –

1
System.Type type = typeof(List<String>); 
+0

Questo non funzionerà a meno che non si voglia ottenere il tipo di System.Web.UI.MobileControls.List. Intendevi typeof (Lista <>)? – Giorgi

0
typeof(List<string>) 
Problemi correlati