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

Why is String.IsNullOrWhiteSpace(vbNullChar) = False?

我正在使用第 3 方库从机器的变量中获取数据。数据 returns 是字符串类型,所以在请求数据后我正在验证它不是像这样的空字符串:

Not String.IsNullOrWhiteSpace(data)

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

通过调试我注意到第 3 方库中的函数 returns vbNullChar 当变量为空并且 String.IsNullOrWhiteSpace(vbNullChar) 计算为 False 时,我期望它像 String.IsNullOrWhiteSpace(vbNullString) 那样评估为 True

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

Not String.IsNullOrWhiteSpace(data) AndAlso data <> vbNullChar

因为你要在这里比较的两个东西是不同"null"的东西。

String.IsNullOrWhiteSpace returns true 如果:

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

在这种情况下,您试图传入 Constants.vbNullChar 两者都不是,它是一个由 1 个字符组成的字符串,即 [=15=] 字符,未归类为空白。

另一方面,

Constants.vbNullString 是一个 null 引用,String.IsNullOrWhiteSpace 处理得很好。


至于这个具体问题你应该怎么处理,我会在得到结果后马上把vbNullChar替换成nullvbNullString),这样这个怪事就会只需检查一个地方。

此外,如果你得到一个字符串,它是否以这个 [=15=] 字符结尾?如果是这样,那么您可能也想删除它。