Разница между + и & для соединения строк в VB.NET
в чем разница между +
и &
для соединения строк в VB.NET?
8 ответов:
нет никакой разницы, если оба операнда являются строками. Однако, если один операнд является строкой, а один-числом, то вы столкнетесь с проблемами, см. код ниже.
"abc" + "def" = "abcdef" "abc" & "def" = "abcdef" "111" + "222" = "111222" "111" & "222" = "111222" "111" & 222 = "111222" "111" + 222 = 333 "abc" + 222 = conversion error
поэтому я рекомендую всегда использовать
&
когда вы хотите объединить, потому что вы можете попытаться объединить целое число, float, decimal в строку, что вызовет исключение или в лучшем случае не сделает то, что вы, вероятно, хотите.
оператор & всегда проверяет, что оба операнда являются строками, в то время как оператор + находит перегрузку, соответствующую операндам.
выражение
1 & 2
дает значение "12", в то время как выражение 1 + 2 дает значение 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
оператор + может быть либо сложением, либо конкатенацией. И только конкатенации. Если выражения являются обеими строками, результаты будут одинаковыми.
Я использую & при работе со строками, и + при работе с числами, так что никогда нет путаницы о моем намерении. Если вы ошибочно используете + и одно выражение является строкой, а одно-числом, вы рискуете получить нежелательный результат.
нет никакой разницы в большинстве случаев. Тем не менее, лучшей практикой является:
"+ " должно быть зарезервировано для целое число дополнений, потому что если вы не используете Опция Strict On тогда вы, возможно, действительно испортили ситуации, такие как:
Input + 12
может дать вам20
вместо812
. Это может быть особенно плохо в ASP.NET приложение, в котором ввод поступает из POST/GET.проще говоря: для соединения строк, всегда используйте " & "вместо"+".
очевидно, что использовать StringBuilder где это подходит :)
прямо из документации MSDN: операторы конкатенации в Visual Basic
различия между двумя операторами конкатенации
оператор + (Visual Basic) имеет основную цель добавления двух числа. Однако он также может объединять числовые операнды со строкой операнды. Оператор + имеет сложный набор правил, которые определяют следует ли добавлять, объединять, сигнализировать об ошибке компилятора или бросать время выполнения Исключение InvalidCastException.
оператор & (Visual Basic) определяется только для строковых операндов, и он всегда расширяет свои операнды до строки, независимо от настройки Вариант Строгий. Оператор & рекомендуется для конкатенации строк потому что он определен исключительно для строк и уменьшает ваши шансы о создании непреднамеренного преобразования.
доверяйте MSDN! : -)