4

请对我放松,因为我还在学习。

以下代码:

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

4 回答 4

6

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

使用格式占位符

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

使用字符串连接

Dim name As String = "James" & " " & "Johnson"
于 2012-04-09T21:02:44.373 回答
5

您在这里看到的是两个非常不同的表达式,它们恰好计算出相同的输出。

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

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

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

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

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

于 2012-04-09T21:01:56.743 回答
4

使用{N}称为复合格式。除了可读性之外,一个优点是您可以轻松设置对齐和格式属性。来自 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
于 2012-04-09T21:04:32.907 回答
2

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

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

如果您正在执行大量替换,那么最好的性能将是使用System.Text.StringBuilder代替。

于 2012-04-09T21:03:17.007 回答