6

PropertyInfo SetValueおよびnullに関連)

フィールドを指す、、、およびaがpublic class Thing { public int X; }ある場合、なぜ呼び出すことが合法ですか?ランタイムはフィールドをゼロに設定します。つまり、aをに設定できないと文句を言う代わりに。Thing oFieldInfo fiXfi.SetValue(o, null)Xdefault(int)ValueTypenull

この動作の背後にある設計上の選択を知っている人はいますか?少なくともC#からは、驚き最小の原則に違反していますか?

4

1 に答える 1

4

の [例外] ボックスに含まれるテキストは、渡された値が変換ArgumentExceptionの対象であることを示唆しており、変換が成功する理由を説明しています。

値パラメーターを変換してフィールドに格納することはできません。

特にリフレクション API はより厳格で寛容性の低い API の 1 つであると一般的に予想されているため、少し奇妙に思えることに同意します。

Eric Lippertに連絡してみてください。これは C# ではなく BCL/CLR に関する質問ですが、彼が答えを知っているか、知っている人を知っている可能性があります。それか、非常に良い推測をすることができます。

于 2010-08-29T09:36:25.167 に答える