次のことを考慮してください。
Object box = 5;
int @int = (int)box; // int = 5
int? nullableInt = box as int?; // nullableInt = 5;
StringComparison @enum = (StringComparison)box; // enum = OrdinalIgnoreCase
StringComparison? nullableEnum = box as StringComparison?; // nullableEnum = null.
2つのこと::
- 箱を開けるのはなぜ
StringComparison
ですか?これは、基になるタイプがであるためだと思いますがInt32
、それでも奇妙だと思います。 - なぜ
nullableEnum
nullの値を持つのですか?
私が理解しているように、ボックス化された値型からの唯一の有効なアンボックス化は、その型またはnull許容型です。int
にボックスを解除できる場合Enum
、null許容値に同じことが当てはまらないのはなぜですか?同様に、5の代わりにボックス化StringComparison.OrdinalIgnoreCase
した場合、それはnullableInt
nullになりますが、nullableEnum
そうではありません。