System.RuntimeType
es una clase concreta que se deriva de la clase base abstracta System.Type
. Dado System.RuntimeType
que no es público, normalmente encontrará instancias como System.Type
.
La confusión puede surgir cuando intenta obtener el tipo de un objeto y llama GetType()
por error a otro objeto que representa el tipo del primer objeto, en lugar de usar ese objeto directamente. Luego Type.ToString()
regresará "System.RuntimeType"
cuando el objeto al que se llama esté representando un Tipo:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Por ejemplo, en esta publicación de blog, alguien está tratando de obtener el tipo de columna en una base de datos, haciendo algo como esto:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Dado que val ya es un objeto Type, val.GetType () devolverá otro objeto Type que representa el tipo, System.RuntimeTime
ya que este es el tipo concreto utilizado para representar el objeto tipo original. La publicación del blog luego muestra algunos trucos de reflexión innecesarios, para obtener el tipo de objeto de tipo original, cuando en realidad todo lo que se requería era:
Type type = reader.GetFieldType(index) as Type;
Por lo tanto, si su Type
objeto informa que representa a System.RuntimeType
, asegúrese de no haber llamado accidentalmente GetType()
a un tipo que ya tiene.