??或.GetValueOrDefault()

时间:2019-06-04 04:07:37

标签: c# .net operators null-coalescing

我具有在计算中使用的属性类型int?decimal?。如果它们中任何一个的值为null,则必须默认为0。我试图在使用null-coalescing或GetValueOrDefault()之间做出选择,如果值为null,它们也将默认为0。 哪种方法在可读性和性能(如果有明显区别)方面会更好?

第一:

public decimal MyMethod(int memberId)
{ 
    var dto = GetDtoValue(memberId);
 return (dto.PropertyOne ?? 0)
      + (dto.PropertyTwo ?? 0)
      + (dto.PropertyThree ?? 0)
      - (dto.PropertyFour ?? 0)
      + ...
}

第二:

public decimal MyMethod(int memberId)
    { 
        var dto = GetDtoValue(memberId);
     return dto.PropertyOne.GetValueOrDefault())
          + dto.PropertyTwo.GetValueOrDefault())
          + dto.PropertyThree.GetValueOrDefault())
          - dto.PropertyFour.GetValueOrDefault())
          + ...
    }

2 个答案:

答案 0 :(得分:3)

可读性

这当然是意见,但是

  • 我读了?? 0,感觉立刻就明白了
  • 我读了GetValueOrDefault,不得不花点时间考虑一下类型,然后再考虑该类型的默认值(我不认为这是个问题,只是指出了“心理映射”) li>

性能

This source建议GetValueOrDefault更快,但仅在micro-optimization的情况下-因此在大多数情况下,应该优先考虑可读性。

  • 如果有兴趣,该来源也会显示CIL

答案 1 :(得分:1)

具有什么价值

??(空合并)将在这种情况下在内部调用GetValueOrDefault

性能差异将是微不足道的(除非您有性能问题),因此剩下的就是确定您认为更可读的方式

查看here