我看了一些代码并发现了这个:
Dim TestString As String
...
If TestString <> Nothing And TestString <> "" Then
...
EndIf
两个条件都检查相同的事情吗?谢谢
答案 0 :(得分:14)
Nothing
根本就没有字符串(null
在其他语言中),这与空字符串(""
)不同,后者实际上是一个字符串。
但是,检查应该替换为If Not String.IsNullOrEmpty(TestString) Then
,这样可以更清楚地了解您正在做什么。
我刚刚在LINQPad中玩了一些,发现了一些令人费解的东西。在VB.NET中:
Dim s1 as string = Nothing
Dim s2 as string = ""
Console.WriteLine(s1 is Nothing) 'True
Console.WriteLine(s2 is Nothing) 'False
Console.WriteLine(s1 = "") 'True
Console.WriteLine(s2 = "") 'True
Console.WriteLine(string.IsNullOrEmpty(s1)) 'True
Console.WriteLine(string.IsNullOrEmpty(s2)) 'True
在C#中:
string s1 = null;
string s2 = "";
Console.WriteLine(s1 == null); //True
Console.WriteLine(s2 == null); //False
Console.WriteLine(s1 == ""); //False
Console.WriteLine(s2 == ""); //True
Console.WriteLine(string.IsNullOrEmpty(s1)); //True
Console.WriteLine(string.IsNullOrEmpty(s2)); //True
我并不是那么期待。似乎VB.Net将Nothing
视为空字符串。我的猜测是与旧版本的VB兼容。
这进一步加强了你应该使用String.IsNullOrEmpty
进行这些检查,因为它更明确你要检查的内容,并按预期工作。
答案 1 :(得分:7)
他们正在检查同样的东西,但他们可能意味着来检查不同的东西。
If IsNothing(TestString) Then
并且
If TestString = Nothing Then
是不同的测试 - 第一种很少使用,因为通常你只是想知道它是否具有非空值。但它可用于在DB中以不同的方式处理空字符串和空值,或用于检测可选参数的使用(两种情况都需要额外的工作以确保您不会无意中滑入错误的值,所以有些脆弱)。
在给出的示例中,测试实际上有点罗嗦和令人困惑,如果这是您想要测试的那么 如果String.IsNullOrEmpty(TestString)那么
是否可以解决这个问题。如果“和”应该是“或”那么使用IsNothing(TestString)可能是有意义的。
答案 2 :(得分:3)
是的,根据VB.NET中的定义""
相当于Nothing
,包括=
,<>
和所有 VB 函数;除非您明确关心差异,例如选中Is
。
当然,在使用常规.NET函数时,尤其是str.Method
将因Null引用异常而失败的方法时,您会看到差异。
顺便说一句,我猜想OP中的摘录是C#代码(严重)转换。