Обработка строк с помощью & или + в VB.NET
Я видел, как несколько программистов используют &
и +
для строковых манипуляций.
Например:
dim firstvar as string
dim secondvar as string
dim thirdvar as string
thirdvar = firstvar & secondvar
Или это:
thirdvar = firstvar + secondvar
Это имеет значение? Если да, то почему?
Ответы
Ответ 1
Операторы +
и &
не идентичны в 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'
Итак, моя рекомендация (помимо избегания подобных типов микширования) заключается в использовании &
при конкатенации строк, чтобы убедиться, что ваши намерения понятны компилятору и избегают ошибок, которые невозможно найти, используя +
для конкатенации.
Ответ 2
Рассмотрим, если вам лучше использовать String.Format при конкатенации строк. Обычно код заканчивается тем, что имеет больше смысла.
Кроме того, если вы конкатенируете много раз, подумайте о том, чтобы использовать StringBuilder, а не строку.
Ответ 3
В общем случае и всегда будет конкатенация строк независимо от типов аргументов, а + не будет. Так как нет недостатка в использовании и более + в противном случае, в ситуациях, когда вы явно желаете конкатенации строк, это предпочтительнее. Это также делает код более понятным.
Ответ 4
Амперсанд - рекомендуемый метод. Оператор плюс будет работать, иногда, для конкатенации строк, но не считается правильным и будет иногда приводить к непредвиденным результатам.
Ответ 5
Они идентичны в VB.NET при работе с 2 строками. "&" оператор существует для обратной совместимости в VB 6 и ранее, где и был оператором конкатенации строк, и + не работал для текста.
Существует разница, если один из двух операндов не является строкой, а указал bdukes. Однако в этой ситуации я настоятельно рекомендую использовать String.Format или StringBuilder (в зависимости от количества/типов операций) для построения результирующей строки из смешанных типов.
В целом я бы рекомендовал использовать + по одной причине. Если вы когда-либо решили перевести код на другой язык (например, С#), оператор + будет больше соответствовать переведенной версии. Вероятно, для людей, приезжающих с другого языка, будет легче понять и следовать вашему коду.
Ответ 6
Независимо от многочисленных подсказок "придерживаться одного ИЛИ другого" - это зависит от сильно, что вы объединяете.
Короче говоря, я бы использовал "&" для строк и "+" только для арифметических операций
Почему? Взгляните на https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks
Все эти комбинации с переключением строкового -option похожи на то, как катить кости для компилятора... и никогда не бывает очевидным для читателя.
Я также добавлю https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators#differences-between-the-two-concatenation-operators с понятным выражением:
Оператор + имеет основную цель добавления двух чисел.