vb.net – 否定null条件运算符会返回意外结果

vb.net – 否定null条件运算符会返回意外结果,第1张

概述如果变量值为Nothing,我们会遇到null条件运算符的意外行为. 以下代码的行为让我们有点困惑 Dim l As List(Of Object) = MethodThatReturnsNothingInSomeCases() If Not l?.Any() Then 'do something End If 如果l没有条目或者l是Nothing,那么预期的行为是Not l?.A 如果变量值为nothing,我们会遇到null条件运算符的意外行为.

以下代码的行为让我们有点困惑

Dim l As List(Of Object) = MethodThatReturnsnothingInSomeCases()  If Not l?.Any() Then    'do something  End If

如果l没有条目或者l是nothing,那么预期的行为是Not l?.Any()是真的.但如果我没什么,那么结果就是假的.

这是我们用来查看实际行为的测试代码.

imports Systemimports System.Collections.Genericimports System.linqPublic Module Module1 Public Sub Main()  If nothing Then   Console.Writeline("nothing is truthy")  ELSE    Console.Writeline("nothing is falsy")  End If  If Not nothing Then   Console.Writeline("Not nothing is truthy")  ELSE    Console.Writeline("Not nothing is falsy")  End If  Dim l As List(Of Object)  If l?.Any() Then   Console.Writeline("nothing?.Any() is truthy")  ELSE    Console.Writeline("nothing?.Any() is falsy")  End If   If Not l?.Any() Then   Console.Writeline("Not nothing?.Any() is truthy")  ELSE    Console.Writeline("Not nothing?.Any() is falsy")  End If  End SubEnd Module

结果:

>没有什么是假的
>没有什么是真的
>没什么?.Any()是假的
>什么都没有?.Any()是假的

如果评估为真,为什么不是最后一个?

C#阻止我完全写这种检查……

解决方法 在VB.NET中,与C#相反,nothing不等于或等于其他任何东西(类似于sql).那么如果将布尔值与布尔值进行比较?没有价值的结果既不是真也不是假,相反,比较也将返回nothing.

在VB.NET中,没有值的可空值意味着未知值,因此如果将已知值与未知值进行比较,结果也是未知的,不是真或假.

你可以做的是使用Nullable.HasValue:

Dim result as Boolean? = l?.Any()If Not result.HasValue Then    'do somethingEnd If

相关:Why is there a difference in checking null against a value in VB.NET and C#?

总结

以上是内存溢出为你收集整理的vb.net – 否定null条件运算符会返回意外结果全部内容,希望文章能够帮你解决vb.net – 否定null条件运算符会返回意外结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1232758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存