“{0}”和“&”之间的区别是什么?在VB.NET中?

时间:2012-04-09 20:56:24

标签: vb.net concatenation

在我还在学习的时候,请对我这些人轻松。

以下代码:

Imports System.Console

Module Module1

    Sub Main()
        Dim num As Integer
        Dim name As String

        num = 1
        name = "John"

        WriteLine("Hello, {0}", num)
        WriteLine("Hello, {0}", name)
        WriteLine("Hello, {0}", 1)
        WriteLine("Hello, {0}", "John")
        WriteLine("5 + 5 = {0}", 5 + 5)

        WriteLine()
    End Sub

End Module

与此代码具有相同的输出:

Imports System.Console

    Module Module1

        Sub Main()
            Dim num As Integer
            Dim name As String

            num = 1
            name = "John"

            WriteLine("Hello, " & num)
            WriteLine("Hello, " & name)
            WriteLine("Hello, " & 1)
            WriteLine("Hello, " & "John")
            WriteLine("5 + 5 = " & 5 + 5)

            WriteLine()
        End Sub

    End Module

两个输出:

  

您好,1
  你好,约翰
  您好,1
  你好,约翰
  5 + 5 = 10

我到处寻找,找不到答案 何时使用“{0},{1},...等”?何时使用“&”
哪个更好?为什么?

4 个答案:

答案 0 :(得分:6)

使用{0},您指定了格式占位符,而使用&,您只是连接字符串。

使用格式占位符

Dim name As String = String.Format("{0} {1}", "James", "Johnson")

使用字符串连接

Dim name As String = "James" & " " & "Johnson"

答案 1 :(得分:5)

你在这里看到的是两个非常不同的表达式,恰好可以评估相同的输出。

VB.Net中的&运算符是字符串连接运算符。它本质上是通过将表达式的左侧和右侧转换为String并将它们添加到一起来实现的。这意味着以下所有操作都大致等效

"Hello " & num
"Hello " & num.ToString()
"Hello " & CStr(num)

{0}是.Net API的一项功能。它表示字符串中的位置,稍后将替换为值。 {0}指的是传递给函数的第一个值,{1}指的是第二个,依此类推。这意味着以下所有操作都大致等效

Console.WriteLine("Hello {0}!", num)
Console.WriteLine("Hello " & num & "!")

您看到相同输出的原因是因为将{0}放在字符串的末尾几乎与2个值的字符串串联完全相同。

答案 2 :(得分:4)

使用{N}称为Composite Formatting。除了可读性之外,还有一个优点是您可以轻松设置对齐和格式属性。来自MSDN链接的示例:

Dim MyInt As Integer = 100
Console.WriteLine("{0:C}", MyInt)
' The example displays the following output
' if en-US is the current culture:
'        $100.00

答案 3 :(得分:2)

{0}是一个与String.Format结合使用的占位符,以便具有更易读且更高效的字符串替换。包括WriteLine在内的几个方法调用都对String.Format进行了隐式调用。

使用串联的问题是每个concat操作都会创建一个消耗内存的新字符串。

如果你进行了大量的替换,那么最好的表现就是使用System.Text.StringBuilder代替。