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()はSystem.RuntimeTime
、元の型オブジェクトを表すために使用される具象型であるため、型を表す別のTypeオブジェクトを返します。ブログの投稿では、元の型オブジェクトの型を取得するために、実際に必要なのは次の場合に、不要なリフレクションのトリックを示しています。
Type type = reader.GetFieldType(index) as Type;
したがって、Type
オブジェクトがを表すと報告している場合は、すでに取得しているタイプをSystem.RuntimeType
誤って呼び出していないことを確認してくださいGetType()
。