空结合运算符"??" 没有捕获作为外键的数据库空值

ewo*_*ack 0 c# null exception-handling operators

我有一个简单的C#语句:

var code = container.thing.result.decode ?? "Unknown";
Run Code Online (Sandbox Code Playgroud)

抛出"对象引用未设置为对象的实例".数据库值为null时的异常.它与非空值完美配合(到目前为止).我试着更明确地用三元运算符重写该行:

var outcome = container.thing.result.decode == null ? "Unknown" : container.thing.result.decode;
Run Code Online (Sandbox Code Playgroud)

并且我得到了相同的异常相同的结果(并且ReSharper引导我回到更简单的语句).

我也读过那个?? 运算符仅适用于可空类型.我正在使用的字段不是可空类型,它是nvarchar(100),也是查找表的外键.如上所述,该语句使用有效的非null值.

应用程序的ORM也有一个CODE值,用于生成CODE和DECODE对,它看起来像应该映射到查找表.

但我无法弄清楚如何处理空值.

谢谢!

编辑:谢谢你的快速回复!我确实发现了在发布后几分钟我感到困惑的地方.我认为写出问题有助于我描述问题.我更改了语句以检查引用查找表的实际字段是否为null:

var outcome = container.thing.database_code_field == null ? "Unknown" : container.thing.result.Decode;
Run Code Online (Sandbox Code Playgroud)

这看起来像我想要的.再次感谢你!

Jon*_*eet 5

如果以下任何一个为null,您将收到异常:

  • container
  • container.thing
  • container.thing.result

我们无法分辨您的情况中哪些值为null,或者null是否为有效值.你应该解决这个问题,然后修复任何给你空值的东西,或编写代码来处理这种情况.