C# – ??或.GetValueOrDefault()

我有属性类型为int吗?和十进制?在计算中使用的如果它们中任何一个的值为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())
          + ...
    }

解决方法:

可读性

这当然是意见,但是

>我读了?? 0,立即感觉很清晰
>我读了GetValueOrDefault,然后花了一点时间考虑类型,然后考虑该类型的默认值(我不认为这是个问题,只是指出了“心理映射”)

性能

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

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

上一篇:wex5当中,解决图片等比例缩放问题


下一篇:c-C运算符不应用于int吗?