System.RuntimeTypejest konkretną klasą wywodzącą się z abstrakcyjnej klasy bazowej System.Type. Ponieważ System.RuntimeTypenie jest publiczny, zazwyczaj napotkasz jego wystąpienia jakoSystem.Type .
Nieporozumienie może powstać, gdy próbujesz uzyskać typ obiektu i omyłkowo wywołujesz GetType()inny obiekt reprezentujący typ pierwszego obiektu, zamiast po prostu używać tego obiektu bezpośrednio. Następnie Type.ToString()zwróci, "System.RuntimeType"gdy wywoływany obiekt reprezentuje Type:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Na przykład w tym poście na blogu ktoś próbuje uzyskać typ kolumny w bazie danych, robiąc coś takiego:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Ponieważ val jest już obiektem Type, val.GetType () zwróci inny obiekt Type reprezentujący typ, System.RuntimeTimeponieważ jest to konkretny typ używany do reprezentowania pierwotnego obiektu typu. W poście na blogu pokazano następnie niepotrzebną sztuczkę refleksji, aby uzyskać typ obiektu typu oryginalnego, podczas gdy tak naprawdę wszystko, co było wymagane, to:
Type type = reader.GetFieldType(index) as Type;
Więc jeśli twój Typeobiekt zgłasza, że reprezentuje a System.RuntimeType, upewnij się, że nie wywołałeś przypadkowo GetType()typu, który już masz.