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об’єкт повідомляє, що він представляє a System.RuntimeType, переконайтесь, що ви випадково не зателефонували GetType()типу, який ви вже отримали.