В чем разница между +
и &
для объединения строк в VB.NET?
Разница между + и & для присоединения строк в VB.NET
Ответ 1
Нет никакой разницы, если оба операнда являются строками. Однако, если один операнд является строкой, а один - числом, то возникают проблемы, см. Код ниже.
"abc" + "def" = "abcdef"
"abc" & "def" = "abcdef"
"111" + "222" = "111222"
"111" & "222" = "111222"
"111" & 222 = "111222"
"111" + 222 = 333
"abc" + 222 = conversion error
Поэтому я рекомендую всегда использовать &
, когда вы имеете в виду конкатенацию, потому что вы можете попытаться объединить целое число, float, decimal в строку, что приведет к исключению или, в лучшем случае, не сделает то, что вы, вероятно, хочу, чтобы это делалось.
Ответ 2
Оператор и всегда гарантирует, что оба операнда являются строками, а оператор + обнаруживает перегрузку, которая соответствует операндам.
Выражение 1 & 2
дает значение "12", а выражение 1 + 2 дает значение 3.
Если оба операнда являются строками, то в результате нет никакой разницы.
Ответ 3
Отсутствует.
Как вы можете видеть ниже. Эти две строки кода компилируются точно в один и тот же IL-код:
Module Module1
Sub Main()
Dim s1 As String = "s1"
Dim s2 As String = "s2"
s2 += s1
s1 &= s2
End Sub
End Module
Скомпилирует (примечание System.String::Concat
):
.method public static void Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] string s1,
[1] string s2)
IL_0000: nop
IL_0001: ldstr "s1"
IL_0006: stloc.0
IL_0007: ldstr "s2"
IL_000c: stloc.1
IL_000d: ldloc.1
IL_000e: ldloc.0
IL_000f: call string [mscorlib]System.String::Concat(string,
string)
IL_0014: stloc.1
IL_0015: ldloc.0
IL_0016: ldloc.1
IL_0017: call string [mscorlib]System.String::Concat(string,
string)
IL_001c: stloc.0
IL_001d: nop
IL_001e: ret
} // end of method Module1::Main
Ответ 4
Оператор + может быть либо добавлением, либо конкатенацией. Это и только конкатенация. Если выражения представляют собой обе строки, результаты будут одинаковыми.
Я использую и при работе со строками и + при работе с числами, поэтому никогда не путают мои намерения. Если вы ошибочно используете +, а одно выражение - это строка, а одно - число, вы рискуете получить нежелательные результаты.
Ответ 5
В большинстве случаев нет никакой разницы. Однако наилучшей практикой является:
"+" следует зарезервировать для целочисленных добавлений, потому что если вы не используете Option Strict On, тогда у вас могут быть действительно перепутанные ситуации, такие как:
Input + 12
может дать вам 20
вместо 812
. Это может быть особенно плохо в приложении ASP.NET, где вход поступает из POST/GET.
Проще говоря: Для соединения строк всегда используйте "&" вместо "+".
Очевидно, используйте StringBuilder, где он подходит:)
Ответ 6
Если оба типа статически напечатаны на System.String, между кодом существует нулевая разница. Оба будут разрешены до String.Concat (это то, что +
для строк).
Однако, если объекты не строго типизированы для строки, поздняя привязка Visual Basic будет начинаться с двух очень разных маршрутов. Версия +
попытается выполнить операцию добавления, которая буквально пытается добавить объекты. Это будет делать всевозможные попытки конвертировать оба значения в число, а затем добавлять их.
Оператор &
попытается выполнить конкатенацию. Среда выполнения Visual Basic будет проходить через все преобразования, чтобы преобразовать оба значения в строки. Тогда результаты будут String.Concat
.
Ответ 7
Прямо от MSDN Документация: Операторы конкатенации в Visual Basic
Различия между двумя операторами конкатенации
Оператор + (Visual Basic) имеет основную цель добавления двух номера. Однако он также может конкатенировать числовые операнды со строкой операнды. Оператор + имеет сложный набор правил, определяющих добавлять, конкатенатировать, сигнализировать ошибку компилятора или бросать исключение InvalidCastException во время выполнения.
Операторы и операторы (Visual Basic) определяются только для операндов String и он всегда расширяет операнды до строки, независимо от настройки Вариант Строгий. Оператор и рекомендуется для конкатенации строк потому что он определен исключительно для строк и снижает ваши шансы генерации непреднамеренного преобразования.
Доверяйте MSDN!: -)
Ответ 8
Нет при соединении строк:
Dim string1 As String = "A" + "B"
Dim string2 As String = "A" & "B"
If string1.Equals(string2) And string2.Equals(string1) Then
Debugger.Break()
End If