【发布时间】:2025-12-05 16:05:02
【问题描述】:
我见过几个程序员使用& 和+ 进行字符串操作。
如:
dim firstvar as string
dim secondvar as string
dim thirdvar as string
thirdvar = firstvar & secondvar
或者是:
thirdvar = firstvar + secondvar
这有关系吗?如果有,为什么?
【问题讨论】:
我见过几个程序员使用& 和+ 进行字符串操作。
如:
dim firstvar as string
dim secondvar as string
dim thirdvar as string
thirdvar = firstvar & secondvar
或者是:
thirdvar = firstvar + secondvar
这有关系吗?如果有,为什么?
【问题讨论】:
不管有多少“坚持一个或另一个”的提示 - 这很大程度上取决于你结合了什么。
简而言之,我会将 "&" 用于字符串,而 "+" 仅用于算术运算
所有这些与切换 strict-选项的组合就像为编译器掷骰子一样......对于读者来说永远不会很明显。
+ 运算符的主要目的是将两个数字相加。
【讨论】:
使用& 运算符表示您打算连接字符串,而+ 运算符表示您打算添加数字。使用& 运算符会将操作的两边都转换为字符串。当您有混合类型时(表达式的一侧是字符串,另一侧是数字),您对运算符的使用将决定结果。
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'
所以,我的指导方针(除了避免混合这样的类型)是在连接字符串时使用&,只是为了确保编译器清楚您的意图,并避免涉及使用无法找到的错误+ 运算符连接。
【讨论】:
& 的唯一优点是它总是会导致字符串连接,并将所有操作数转换为字符串。也就是说,它仍然是一个优势,所以使用它是个好主意。
+ 而不是& 遇到了问题。做了这样的事情:<%# ResolveUrl("~/page.aspx?id=" + Eval("Id")) %>。由于 ID 是Integer,VB 尝试将左侧(URL)转换为数字类型,如果不能,则抛出异常。
考虑在连接字符串时使用 String.Format 是否更好。通常,代码最终以这种方式更有意义。
另外,如果您连接很多次,请考虑使用 StringBuilder 而不是 String。
【讨论】:
String.Concat 也很有用。
一般来说,无论参数类型如何,& 总是连接字符串,而 + 则不会。由于使用 & over + 没有任何缺点,因此在您明确需要字符串连接的情况下,它是可取的。它也使代码的意图更加清晰。
【讨论】:
当使用 2 个字符串时,它们在 VB.NET 中是相同的。在 VB 6 及更早版本中,“&”运算符用于向后兼容,其中 & 是字符串连接运算符,而 + 不适用于文本。
如果您的两个操作数之一不是字符串,则会有所不同,例如bdukes pointed out。但是,在这种情况下,我强烈建议使用 String.Format 或 StringBuilder(取决于操作的数量/类型)从混合类型构造结果字符串。
总的来说,我建议使用 +,原因很简单。如果您确实决定将代码翻译成另一种语言(即:C#),+ 运算符将与翻译后的版本匹配得更多。来自其他语言的人可能更容易理解和遵循您的代码。
【讨论】:
String.Format() 来连接字符串,更不用说专用运算符& 了。我也不推荐StringBuilder 当输入字符串的数量事先知道时,因为String.Concat(这是& 将扩展到链式调用)更快,& 本身会更清晰。
& 号是推荐的方法。加号运算符有时可以用于字符串连接,但被认为是不正确的,并且偶尔会产生意想不到的结果。
【讨论】: