System.RuntimeType
é uma classe concreta que deriva da classe base abstrata System.Type
. Como System.RuntimeType
não é público, você normalmente encontrará instâncias dele como System.Type
.
Pode surgir confusão quando você está tentando obter o tipo de um objeto e, por engano, chamar GetType()
outro objeto que representa o tipo do primeiro objeto, em vez de apenas usar esse objeto diretamente. Em seguida Type.ToString()
, retornará "System.RuntimeType"
quando o objeto em que é chamado estiver representando um Tipo:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Por exemplo, nesta postagem do blog, alguém está tentando obter o tipo de uma coluna em um banco de dados, fazendo algo assim:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Visto que val já é um objeto Type, val.GetType () retornará outro objeto Type que representa o tipo, System.RuntimeTime
pois esse é o tipo concreto usado para representar o objeto de tipo original. A postagem do blog mostra alguns truques de reflexão desnecessários, para obter o tipo do objeto de tipo original, quando na verdade tudo o que era necessário era:
Type type = reader.GetFieldType(index) as Type;
Portanto, se o seu Type
objeto estiver relatando que representa um System.RuntimeType
, certifique-se de não ter chamado acidentalmente GetType()
um tipo que já obteve.