System.RuntimeType
ist eine konkrete Klasse, die sich von der abstrakten Basisklasse ableitet System.Type
. Da System.RuntimeType
es nicht öffentlich ist, werden Sie normalerweise auf Instanzen davon als stoßen System.Type
.
Verwirrung kann entstehen, wenn Sie versuchen, den Typ eines Objekts zu ermitteln und fälschlicherweise GetType()
ein anderes Objekt aufrufen, das den Typ des ersten Objekts darstellt, anstatt nur dieses Objekt direkt zu verwenden. Dann Type.ToString()
kehrt , "System.RuntimeType"
wenn das Objekt , um es aufgerufen wird auf ist die eine Art:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString(); // returns "System.string"
strTypeType.ToString(); // returns "System.RuntimeType"
In diesem Blog-Beitrag versucht beispielsweise jemand, den Typ einer Spalte in einer Datenbank abzurufen. Dabei wird Folgendes ausgeführt:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Da val bereits ein Typobjekt ist, gibt val.GetType () ein anderes Typobjekt zurück, das den Typ darstellt, System.RuntimeTime
da dies der konkrete Typ ist, der zur Darstellung des ursprünglichen Typobjekts verwendet wird . Der Blog-Beitrag zeigt dann einige unnötige Reflexionstricks, um den Typ des ursprünglichen Typobjekts zu ermitteln, wenn wirklich nur Folgendes erforderlich war:
Type type = reader.GetFieldType(index) as Type;
Wenn Ihr Type
Objekt also meldet, dass es einen darstellt System.RuntimeType
, stellen Sie sicher, dass Sie nicht versehentlich GetType()
einen Typ aufgerufen haben, den Sie bereits haben.