System.RuntimeType
jest konkretną klasą wywodzącą się z abstrakcyjnej klasy bazowej System.Type
. Ponieważ System.RuntimeType
nie 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.RuntimeTime
ponieważ 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 Type
obiekt zgłasza, że reprezentuje a System.RuntimeType
, upewnij się, że nie wywołałeś przypadkowo GetType()
typu, który już masz.