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()тип, который у вас уже есть.