【问题标题】:String manipulation with & or + in VB.NET在 VB.NET 中使用 & 或 + 进行字符串操作
【发布时间】:2025-12-05 16:05:02
【问题描述】:

我见过几个程序员使用&+ 进行字符串操作。

如:

dim firstvar as string
dim secondvar as string
dim thirdvar as string

thirdvar = firstvar & secondvar

或者是:

thirdvar = firstvar + secondvar

这有关系吗?如果有,为什么?

【问题讨论】:

标签: .net vb.net string


【解决方案1】:

不管有多少“坚持一个或另一个”的提示 - 这很大程度上取决于你结合了什么。

简而言之,我会将 "&" 用于字符串,而 "+" 仅用于算术运算

为什么?看看https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

所有这些与切换 strict-选项的组合就像为编译器掷骰子一样......对于读者来说永远不会很明显。

我还会在明确的声明中添加https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators#differences-between-the-two-concatenation-operators

+ 运算符的主要目的是将两个数字相加。

【讨论】:

    【解决方案2】:

    +& 运算符在 VB.NET 中相同。

    使用& 运算符表示您打算连接字符串,而+ 运算符表示您打算添加数字。使用& 运算符会将操作的两边都转换为字符串。当您有混合类型时(表达式的一侧是字符串,另一侧是数字),您对运算符的使用将决定结果。

    1 + "2" = 3 'This will cause a compiler error if Option Strict is on'
    1 & "2" = "12"
    1 & 2 = "12"
    "text" + 2 'Throws an InvalidCastException since "text" cannot be converted to a Double'
    

    所以,我的指导方针(除了避免混合这样的类型)是在连接字符串时使用&,只是为了确保编译器清楚您的意图,并避免涉及使用无法找到的错误+ 运算符连接。

    【讨论】:

    • 感谢您的提醒。我总是忘记这一点(出于我在新编辑中描述的原因)。
    • 干得好 bdukes。所以我毕竟是对的,尽管我不知道,哈哈。
    • “+ 运算符表示您打算添加数字”不正确。它通常表明您打算将两个东西加在一起(不要忘记运算符重载!),并且适用于 2 个字符串。 & 的唯一优点是它总是会导致字符串连接,并将所有操作数转换为字符串。也就是说,它仍然是一个优势,所以使用它是个好主意。
    • 刚刚使用+ 而不是& 遇到了问题。做了这样的事情:<%# ResolveUrl("~/page.aspx?id=" + Eval("Id")) %>。由于 ID 是Integer,VB 尝试将左侧(URL)转换为数字类型,如果不能,则抛出异常。
    • MS 的最佳实践要求在连接字符串时使用 &。好叫bdukes。
    【解决方案3】:

    考虑在连接字符串时使用 String.Format 是否更好。通常,代码最终以这种方式更有意义。

    另外,如果您连接很多次,请考虑使用 StringBuilder 而不是 String。

    【讨论】:

    【解决方案4】:

    一般来说,无论参数类型如何,& 总是连接字符串,而 + 则不会。由于使用 & over + 没有任何缺点,因此在您明确需要字符串连接的情况下,它是可取的。它也使代码的意图更加清晰。

    【讨论】:

      【解决方案5】:

      当使用 2 个字符串时,它们在 VB.NET 中是相同的。在 VB 6 及更早版本中,“&”运算符用于向后兼容,其中 & 是字符串连接运算符,而 + 不适用于文本。

      如果您的两个操作数之一不是字符串,则会有所不同,例如bdukes pointed out。但是,在这种情况下,我强烈建议使用 String.Format 或 StringBuilder(取决于操作的数量/类型)从混合类型构造结果字符串。

      总的来说,我建议使用 +,原因很简单。如果您确实决定将代码翻译成另一种语言(即:C#),+ 运算符将与翻译后的版本匹配得更多。来自其他语言的人可能更容易理解和遵循您的代码。

      【讨论】:

      • 它们在 VB.NET 中是相同的,具体请参见我的回答。
      • 好点——我总是忘记这一点(尽管我从来没有认为做 1 和“2”是我认为合适的事情;))
      • 编辑回复以进行补偿。
      • 我不会推荐String.Format() 来连接字符串,更不用说专用运算符& 了。我也不推荐StringBuilder 当输入字符串的数量事先知道时,因为String.Concat(这是& 将扩展到链式调用)更快,& 本身会更清晰。
      • @Pavel:如果您的操作数之一不是字符串,您不会使用 string.format?这是我明确建议的。
      【解决方案6】:

      & 号是推荐的方法。加号运算符有时可以用于字符串连接,但被认为是不正确的,并且偶尔会产生意想不到的结果。

      【讨论】:

      • 什么时候会产生意想不到的结果?请详细说明以获得完整的答案。
      • 在 VB.NET 中不再是这样 - VB6 和更早的版本是这样的 - vb.net 在字符串上使用 .NET 运行时的 operator+,这是完全支持的。 & 是 VB.NET 中的别名。
      • Reed 是正确的,我冗长的 VB6 经验导致我的响应无效。我在 VB.Net 中都进行了测试,并且都可以正常工作。但是,正如另一张海报所指出的那样,为了清楚起见,我仍然会使用与号。
      最近更新 更多