这是在vb.net中初始化null的字符串的最佳方法

时间:2014-08-20 09:26:53

标签: .net vb.net string initialization

我们可以通过以下方式在string中声明并初始化vb.net变量:

 Dim str1 As String = ""
 Dim str2 As String = Nothing
 Dim str3 As String = vbNullString

问题:

  • 哪一个是最好的编程习惯?
  • 这三种方法有什么区别?

3 个答案:

答案 0 :(得分:6)

除非另有说明,否则字符串将设置为Nothing,因此无需像这样初始化它:

Dim s As String = Nothing 

因为这与

相同
Dim s As String

您可能希望稍后在代码中设置它,而不是在初始化时设置

vbNullString是VB6天的结转,在功能上等同于Nothing

空白字符串("")和String.Empty是等效的。


有人说String.Empty有一点性能优势,但我没有看到任何证据。

注意:这两个产生的IL 不同:

""产生:

IL_0001:  ldstr      ""

String.Empty产生:

IL_0001:  ldsfld     string [mscorlib]System.String::Empty

所以回答你的问题:

Dim str1 As String = "" 'Initialises as blank string same as String.Empty
Dim str2 As String = Nothing 'Same as Dim str2 As String
Dim str3 As String = vbNullString 'Same as previous line but deprecated so avoid

如果你想要一个空字符串

,那么你应该使用以下内容
Dim s As String = ""

如果你想要一个Null(Nothing)字符串,可以使用以下代码:

Dim s As String

你想要哪一个取决于你在做什么

答案 1 :(得分:0)

您发布的所有三个初始化在功能上等同于空字符串或未初始化的字符串。它们都不会比其他的更有利。即使它有,但优势将是如此之小,以至于它根本不重要。

虽然个别观点可能有所不同,但我觉得初始化带有空/空值的变量与声明是一件坏事(一般而言),除非该变量的生命周期仅跨越几行。这是因为它没有为编译器提供任何建议优化的选项。为编译器保留灵活性在大型维护项目中尤其有用,在这些项目中,通常会在子/函数的顶部声明所有变量,并在代码中稍后使用它。

考虑以下情况:

两个变量在函数顶部声明,并以下列方式在代码中的某处使用。

Sub Test()
    Dim str1 As String = ""
    Dim str2 As String

    ' blah blah blah

    ' some code

    ' more code

    ' variables are used here
    str1 = "something"
    str2 = "something else"

End Sub

现在由于一些维护要求,修改/删除了使用这些变量的代码,不再需要这些变量。在这种情况下忘记删除变量声明是很常见的。但是如果没有删除声明,编译器将能够警告str2变量,但不能警告str1

enter image description here

对于小功能,这似乎没有任何好处。但要考虑大小跨越页面的功能,并且一切都不适合屏幕。在大型维护项目中,功能增加是很常见的。你在那里获得了优势。

虽然在声明变量时明确指定空/空值并不给你任何特别的好处,但在声明它时将其保留为未分配会给你带来上述优势。

答案 2 :(得分:-2)

Dim str As String = "" ' <--This is "not best practice"
Dim str2 As String = Nothing ' <--This is "not best practice"
Dim str3 As String = vbNullString ' <--This is "not best practice"
Dim str4 As String = String.Empty ' <--correct

默认情况下,无论如何,strWords默认为Nothing。

在声明变量时,不应通过设置值来确保此值永远不变,您应确保代码不会使strWords成为Nothing的可能性,如果是,则适当地处理它。

如果您需要检查字符串是否为空或无,请执行以下操作:

If Not String.IsNullOrEmpty(strWords) Then

归功于this post