将枚举类型转换为可空类型

6

我有一个关于转换成可空枚举的问题。这是代码:

enum Digits
{
    One = 1,
    Two = 2
}

void Main()
{
    int one = 1;
    object obj = one;
    var en = (Digits?) obj;
    Console.WriteLine(en);
}

在第11行,我遇到了InvalidCastException异常。
但是如果我省略该行中的'?'符号,则会得到正确的结果"One",但我不想失去'nullability'。
为了解决这个问题,我现在使用var en = (Digits?) (int?) obj;,虽然我不确定这种解决方案的完全正确性。

但我想知道为什么在第一种情况下将枚举类型转换为可空类型失败?

我原以为将可空类型转换为以下类型:
- 如果成功,则转换为非可空类型
- 如果传递了null,则结果也将是null
但事实似乎并非如此。


5
请参考:https://dev59.com/SW435IYBdhLWcg3w0ThP。 - simonalexander2005
1个回答

8

您正在使用封装的 int 值。首先将其拆箱为 int

  var en = (Digits?) (int) obj; // note "(int)"

如果obj可以被赋值为null,则可以使用三目运算符
  Digits? en = null == obj ? null : (Digits?) (int) obj;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接