System.RuntimeType
è una classe concreta che deriva dalla classe base astratta System.Type
. Poiché System.RuntimeType
non è pubblico, in genere incontrerai istanze di esso come System.Type
.
Può sorgere confusione quando si tenta di ottenere il tipo di un oggetto e chiamare erroneamente GetType()
un altro oggetto che rappresenta il tipo del primo oggetto, piuttosto che utilizzare direttamente quell'oggetto. Quindi Type.ToString()
tornerà "System.RuntimeType"
quando l'oggetto su cui è chiamato rappresenta un Tipo:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Ad esempio, in questo post del blog qualcuno sta cercando di ottenere il tipo di una colonna in un database, facendo qualcosa del genere:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Poiché val è già un oggetto Type, val.GetType () restituirà un altro oggetto Type che rappresenta il tipo System.RuntimeTime
poiché questo è il tipo concreto utilizzato per rappresentare l'oggetto di tipo originale. Il post del blog mostra quindi alcuni trucchi di riflessione non necessari, per ottenere il tipo dell'oggetto di tipo originale, quando in realtà tutto ciò che era richiesto era:
Type type = reader.GetFieldType(index) as Type;
Quindi, se il tuo Type
oggetto sta segnalando che rappresenta a System.RuntimeType
, assicurati di non aver chiamato accidentalmente GetType()
un tipo che hai già.