System.RuntimeType
- это конкретный класс, производный от абстрактного базового класса System.Type
. Поскольку System.RuntimeType
не является общедоступным, вы обычно встретите его экземпляры как System.Type
.
Путаница может возникнуть, когда вы пытаетесь получить тип объекта и по ошибке вызываете GetType()
другой объект, представляющий тип первого объекта, вместо того, чтобы просто использовать этот объект напрямую. Затем Type.ToString()
вернется, "System.RuntimeType"
когда объект, который он вызывается, представляет Тип:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Например, в этом сообщении в блоге кто-то пытается получить тип столбца в базе данных, делая что-то вроде этого:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Поскольку val уже является объектом Type, val.GetType () вернет другой объект Type, представляющий тип, System.RuntimeTime
поскольку это конкретный тип, используемый для представления объекта исходного типа. Затем сообщение в блоге показывает некоторые ненужные уловки с отражением, чтобы получить тип исходного объекта типа, когда на самом деле все, что требовалось, было:
Type type = reader.GetFieldType(index) as Type;
Поэтому, если ваш Type
объект сообщает, что он представляет собой System.RuntimeType
, убедитесь, что вы случайно не вызвали GetType()
тип, который у вас уже есть.