【问题标题】:How to avoid NullReferenceException [duplicate]如何避免 NullReferenceException [重复]
【发布时间】:2021-08-17 01:05:37
【问题描述】:

以下代码行:

double? paidAmount = invoices.Value.Where(x => x.Status.Equals(Constants.InvoicePaid)).Sum(x => x.TotalAmount);

当状态为空时导致错误。:

System.NullReferenceException: '对象引用未设置为对象的实例。'

我可以使用 null-coalescing 避免这个异常吗?如果有兴趣,我在这里检查status属性是否等于"paid"我想求和。

【问题讨论】:

  • 我们需要更多信息。究竟是哪个属性引发了异常?
  • 这能回答你的问题吗? What is a NullReferenceException, and how do I fix it?另外一个说明Can I avoid this exception using null-coalescing?你试过了吗,结果如何?
  • 另一个选项,您是否可以选择Constants.InvoiceNotPaidConstants.InvoiceNew,这会很有帮助,因为它可能是Status 的默认值...除非null 是有效的未支付/未知等的价值......
  • @Fabjan Status 属性导致异常

标签: c# linq .net-core


【解决方案1】:

您可以使用空合并运算符:

double? paidAmount = invoices.Value.Where(x => x.Status?.Equals(Constants.InvoicePaid)).Sum(x => x.TotalAmount);

如果Status 为空,这将评估为假。

【讨论】:

  • x 不应该为空,所以我认为你不需要那个条件运算符。
  • 注意,我已经更新了。
  • @ekke 它不起作用它会导致编译器错误:无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 2019-03-30
  • 2021-11-27
相关资源
最近更新 更多