6

Nullable次の型の動作に困惑しています。

class TestClass {
    public int? value = 0;
}

TestClass test = new TestClass();

現在、基になる型である をNullable.GetUnderlyingType(test.value)返します。しかし、このようにフィールド型を取得しようとするとNullableint

FieldInfo field = typeof(TestClass).GetFields(BindingFlags.Instance | BindingFlags.Public)[0];

そして私は呼び出す

Nullable.GetUnderlyingType(field.FieldType).ToString()

型を返しますSystem.Nullable[System.Int32]。つまりNullable.GetUnderlyingType()、メンバー型を取得する方法に応じて、メソッドの動作が異なります。どうしてこんなことに?単純に使用すると、リフレクションを使用せずtest.valueにどうすればわかりますか?Nullable

4

5 に答える 5

3

問題は、 ofがTypeoftest.valueと同じであると仮定していることですが、そうではありません。of を取得すると、実際にはフィールドに格納されている of が取得されます。この場合は 0 です。 Typefield.FieldTypevalueTypetest.valueType

Type t = test.value.GetType()

(あなたの例では)と同じです

Type t = 0.GetType()

実証するには、valuenull に初期化してtest.value.GetType()NullReferenceException

于 2013-05-05T06:29:05.273 に答える