加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么在检查null与VB.NET和C#中的值有什么区别?

发布时间:2020-12-17 07:32:54 所属栏目:百科 来源:网络整理
导读:在 VB.NET这发生: Dim x As System.Nullable(Of Decimal) = NothingDim y As System.Nullable(Of Decimal) = Nothingy = 5If x y Then Console.WriteLine("true")Else Console.WriteLine("false") '' -- I got this. Why?End If 但在C#这发生: decimal? x
在 VB.NET这发生:
Dim x As System.Nullable(Of Decimal) = Nothing
Dim y As System.Nullable(Of Decimal) = Nothing

y = 5
If x <> y Then
    Console.WriteLine("true")
Else
    Console.WriteLine("false") '' <-- I got this. Why?
End If

但在C#这发生:

decimal? x = default(decimal?);
decimal? y = default(decimal?);

y = 5;
if (x != y)
{
    Debug.WriteLine("true"); // <-- I got this -- I'm with you,C# :)
}
else
{
    Debug.WriteLine("false");
}

为什么有区别?

VB.NET和C#.NET是不同的语言,由不同的团队构建,他们对使用做了不同的假设;在这种情况下是NULL比较的语义。

我个人的偏好是对VB.NET语义,其实质上给NULL语义“我还不知道”。然后比较5对“我还不知道”。自然“我还不知道”;即NULL。这具有镜像SQL(在大多数情况下如果不是全部)SQL数据库的行为的额外优点。这也是一个更标准的(比C#的)三值逻辑的解释,如解释here。

C#团队对NULL意味着什么不同的假设,导致您显示的行为差异。 Per Eric Lippert:“我还写了关于VB / VBScript和JScript here和here中null的语义。

在任何可能存在NULL值的环境中,认识到排除中间的法律(即A或?A是互为真实的)不再能被依赖是不言而喻的。

更新:

bool(而不是bool?)只能取值TRUE和FALSE。然而,NULL的语言实现必须决定NULL如何通过表达式传播。在VB中,表达式5 = null和5<> null BOTH返回false。在C#中,比较表达式5 == null和5!= null只有第二个[返回false]。但是,在支持null的任何环境中,程序员都有义务知道该语言使用的真值表和null传播。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读