ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# – ??或.GetValueOrDefault()

2019-10-24 18:08:05  阅读:1492  来源: 互联网

标签:null-coalescing c net operators


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

标签:null-coalescing,c,net,operators
来源: https://codeday.me/bug/20191024/1922240.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有