为什么 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
替换成null
(vbNullString
),这样这个怪事就会只需检查一个地方。
此外,如果你得到一个字符串,它是否以这个 [=15=]
字符结尾?如果是这样,那么您可能也想删除它。
我正在使用第 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
替换成null
(vbNullString
),这样这个怪事就会只需检查一个地方。
此外,如果你得到一个字符串,它是否以这个 [=15=]
字符结尾?如果是这样,那么您可能也想删除它。