String <> Nothing和String <>""在VB .NET中冗余?

Eri*_*son 6 vb.net

我看了一些代码,并发现了这个:

Dim TestString As String
...
If TestString <> Nothing And TestString <> "" Then
...
EndIf
Run Code Online (Sandbox Code Playgroud)

两个条件都检查相同的事情吗?

谢谢

Mat*_*ker 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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

我并不是那么期待.似乎VB.Net将一个Nothing空格作为空字符串.我的猜测是与旧版本的VB兼容.

这进一步加强了您应该String.IsNullOrEmpty用于这些类型的检查,因为它更明确您要检查的内容,并按预期工作.


jmo*_*eno 7

他们正在检查samething,但他们可能会意味着以检查不同的事情.

If IsNothing(TestString) Then
Run Code Online (Sandbox Code Playgroud)

If TestString = Nothing Then
Run Code Online (Sandbox Code Playgroud)

是不同的测试 - 第一个很少使用,因为通常你只是想知道它是否具有非空值.但它可用于在DB中以不同的方式处理空字符串和空值,或用于检测可选参数的使用(两种情况都需要额外的工作以确保您不会无意中滑入错误的值,所以有些脆弱).

在给出的示例中,测试实际上有点罗嗦和混乱,如果那是你想要测试的那么如果String.IsNullOrEmpty(TestString)那么

是走的路吗?如果"和"应该是"或"那么使用IsNothing(TestString)可能是有意义的.