我有属性类型为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