【问题标题】:c# Coalesce operator crashes on nullc# Coalesce 运算符在 null 时崩溃
【发布时间】:2017-07-13 05:06:36
【问题描述】:

从数据库中提取数据我有这个

Result = main.Verified.Equals("1", StringComparison.OrdinalIgnoreCase) ? "Good Sale" : "Bad Sale";

问题是main.Verified 有时为空,因此它会因对象引用错误而崩溃

有什么简单的解决方法?

我在看这个,但我不确定它是否有最好的解决方案 ?? Coalesce for empty string?

【问题讨论】:

  • 如果 main.Verified 为空,您认为它是“Good Sale”还是“Bad Sale”?
  • 从技术上讲,您使用的是三元组。 不是空合并运算符
  • @ShaiAharoni - null 不应该发生,这是坏数据,所以想想坏销售
  • @BradleyDotNET-没错-谢谢
  • @JeremyMiller “不应该发生”如“某处有未修复的错误”或“不应该发生”如“意外​​发生”?如果它是第一个,那么您希望它在此处崩溃(而不是仅仅忽略该问题)并且解决方案是修复该错误。如果是“坏销售”,您的程序是否可以采取某种明智的措施来解决问题?

标签: c#


【解决方案1】:

你总是可以这样做的:

Result =
    (main.Verified ?? "")
        .Equals("1", StringComparison.OrdinalIgnoreCase)
        ? "Good Sale"
        : "Bad Sale";

【讨论】:

  • 谢谢,我现在也听说根据业务规则,如果它为 null,我需要记录它,所以基本上如果它是“1”是好的,2 -9 bad sale,null 是它既不会将一些日志记录到数据库,也不会发送电子邮件或文件...
【解决方案2】:

将 const 值字符串放在比较的首位。

Result = "1".Equals(main.Verified, StringComparison.OrdinalIgnoreCase) 
    ? "Good Sale" 
    : "Bad Sale";

这是可行的,因为string.Equals()null 相比总是返回false。但是,在空引用上调用 .Equals() 总是会抛出 NullReferenceException

【讨论】:

  • 好的,但我永远不会拉入 "1" ,那么我可以做些什么来首先检查 null 呢?
  • 你可以写一个更复杂的条件。 Result = (main != null && main.Verified != null && main.Verfified.Equals("1", StringComparison.OrdinalIgnoreCase)) ? "Good Sale" : "Bad Sale";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多