为什么String.IsNullOrWhiteSpace(vbNullChar)= False?

and*_*ubi 0 .net vb.net string .net-4.0 char

我正在使用第三方库从机器的变量中获取数据.数据返回一个字符串类型,所以在请求数据后,我正在验证它不是一个空字符串,如下所示:

Not String.IsNullOrWhiteSpace(data)
Run Code Online (Sandbox Code Playgroud)

但是,我的程序失败了,我意识到当机器中的变量为空时,上面的函数返回True.

通过调试,我注意到,在第三方库的函数返回vbNullChar时,变量是空的,String.IsNullOrWhiteSpace(vbNullChar)计算结果为False,当我希望它以评估TrueString.IsNullOrWhiteSpace(vbNullString)一样.

那么我唯一的选择是检查如下?

Not String.IsNullOrWhiteSpace(data) AndAlso data <> vbNullChar
Run Code Online (Sandbox Code Playgroud)

ang*_*son 5

因为这里要比较的两件事是不同的 "空"事.

String.IsNullOrWhiteSpace返回true如果:

  • 传递给方法的引用是 null
  • 或者...非null字符串的每个字符都被归类为空白字符(如果字符串的长度为0,则"每个字符"都为真)

在这种情况下,你试图传入Constants.vbNullChar既不是,它是一个由1个字符组成的字符串,该\0字符未被归类为空白.

Constants.vbNullString另一方面,是一个null参考,它String.IsNullOrWhiteSpace处理得很好.


至于你应该如何处理这个具体问题,我会做从更换vbNullCharnull(vbNullString)获得结果后,立即让这一奇怪现象必须检查只有一个地方.

另外,如果你找回一个字符串,它是否以这个\0字符结尾?如果是这样,那么你可能也想删除它.