Подтвердить что ты не робот

Разница между + и & для присоединения строк в VB.NET

В чем разница между + и & для объединения строк в VB.NET?

4b9b3361

Ответ 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