考虑以下::
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 值?
据我了解,唯一有效的拆箱是从装箱值类型到它的类型或可空类型。如果int
可以取消装箱到Enum
,那么为什么对于可空值不适用呢?同样,如果不是 5 I boxed StringComparison.OrdinalIgnoreCase
,那nullableInt
将是 null,但nullableEnum
不会。