2013-02-27 32 views
16

Ho molti oggetti, ognuno dei quali ho informazioni in stringa sul suo tipo.
piace:typeof: come ottenere il tipo da stringa

string stringObjectType = "DateTime"; 

Durante l'esecuzione, non ho alcun oggetto stesso.
Quindi non posso provarlo typeof (object)

Come posso ottenere durante l'esecuzione del tipo di oggetto:

typeof (stringObjectType) 
+0

Si avranno le stringhe come 'DateTime' o' System.DateTime'? –

+0

È questo di cui hai bisogno? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – Youssef

+0

Per la precisione, non è possibile scrivere 'typeof (oggetto)'. Puoi passare solo un nome di classe. Usa invece 'object.GetType'. Sto solo dicendo – RoadBump

risposta

16
try 
{ 
    // Get the type of a specified class. 
    Type myType1 = Type.GetType("System.DateTime"); 
    Console.WriteLine("The full name is {0}.", myType1.FullName); 
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException. 
    Type myType2 = Type.GetType("NoneSuch", true); 
    Console.WriteLine("The full name is {0}.", myType2.FullName); 
} 
catch(TypeLoadException e) 
{ 
    Console.WriteLine(e.Message); 
} 
catch(Exception e) 
{ 
    Console.WriteLine(e.Message); 
} 

Vedere Type.GetType(string) on MSDN

+0

Sì, perché, il suo codice è corretto – animaonline

+2

Mentre questo codice è corretto. Risponde alla sua domanda? string stringObjectType = "DateTime"; non otterrà il tipo corretto qui. – Evelie

+0

Credo fosse solo un esempio – animaonline

18

È possibile utilizzare Type.GetType() per ottenere un tipo di dal suo nome stringa. Quindi puoi fare:

Type DateType = Type.GetType("System.DateTime"); 

Non puoi usare solo "DateTime" poiché non è il nome del tipo. Se lo fai e il nome è sbagliato (non esiste) allora genererà un'eccezione. Quindi avrai bisogno di una prova/cattura intorno a questo.

è possibile ottenere il nome del tipo appropriato per un dato oggetto facendo:

string TypeName = SomeObject.GetType().FullName; 

Se è necessario utilizzare nomi vaghi o incompleti, allora si sta andando ad avere un tempo di divertimento scherzare con la riflessione. Non impossibile, ma certamente un dolore.

Problemi correlati