将 .GetValueOrDefault(0) 和 If(variable, 0) 与可空类型一起使用有什么区别吗?
以下两种计算 c ...特别是装箱/拆箱问题的方法之间有什么区别吗?
Dim a As Integer? = 10
Dim b As Integer? = Nothing
Dim c As Integer
' Method 1
c = If(a, 0) + If(b, 0)
' Method 2
c = a.GetValueOrDefault(0) + b.GetValueOrDefault(0)
Is there any difference between the 2 methods below for calculating c ... specifically boxing/unboxing issues?
Dim a As Integer? = 10
Dim b As Integer? = Nothing
Dim c As Integer
' Method 1
c = If(a, 0) + If(b, 0)
' Method 2
c = a.GetValueOrDefault(0) + b.GetValueOrDefault(0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据 Reflector,代码片段中的 IL 反编译为:
[编辑] 然后查看反射函数
GetValueOrDefault()
和GetValueOrDefault(T defaultValue)
给出以下内容 (分别):并且
表明任何一种形式实际上都做同样的事情
According to Reflector, the IL from your code snippet decompiles into:
[EDIT] And then looking at the Reflected functions
GetValueOrDefault()
andGetValueOrDefault(T defaultValue)
gives the following (respectively):and
Indicating either form does effectively exactly the same thing
c = If(a, 0) + If(b, 0) 语句被编译为:
第二个片段完全按原样编译。它是这里明显的赢家。
The c = If(a, 0) + If(b, 0) statement gets compiled to this:
The second snippet gets compiled exactly as-is. It is the clear winner here.
a.GetValueOrDefault(0)
是If(a, 0)
的稍微更高效的版本a.GetValueOrDefault()
是稍微更高效的版本a.GetValueOrDefault(0)
的版本当然,这只适用于数字类型。
a.GetValueOrDefault(0)
is a slightly more efficient version ofIf(a, 0)
a.GetValueOrDefault()
is a slightly more efficient version ofa.GetValueOrDefault(0)
Of course, this is only true for numeric types.