System.RuntimeType
es una clase concreta que se deriva de la clase base abstracta System.Type
. Como System.RuntimeType
no es público, generalmente encontrará instancias de él como System.Type
.
Puede haber confusión cuando intenta obtener el tipo de un objeto y, erróneamente, llamar a GetType()
en otro objeto que representa el tipo del primer objeto, en lugar de simplemente usar ese objeto directamente. Entonces Type.ToString()
regresará "System.RuntimeType"
cuando el objeto se le llama en es representativos de una categoría:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString(); // returns "System.string"
strTypeType.ToString(); // returns "System.RuntimeType"
Por ejemplo, en this blog post alguien está tratando de obtener el tipo de una columna en una base de datos, hacer 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 tipo de objeto que represente el tipo System.RuntimeTime
ya que este es el tipo concreto utilizado para representar el objeto tipo original. La entrada de blog a continuación, se muestran algunos trucos reflexión innecesaria, para obtener el tipo del objeto de tipo original, fue cuando realmente todo lo que se requería:
Type type = reader.GetFieldType(index) as Type;
Así que si su objeto Type
informa que representa un System.RuntimeType
, asegúrese no ha llamado accidentalmente al GetType()
en un tipo que ya tiene.
¿Puede proporcionar un pequeño programa que demuestre el problema que está experimentando? –
Iba a ir, pero ya recibí la respuesta: P –