Вопрос по .net, string, vb.net – Манипулирование строками с помощью & или + в VB.NET

24

Я видел, как несколько программистов использовали& а также+ для работы со строками.

Такие как:

dim firstvar as string
dim secondvar as string
dim thirdvar as string

thirdvar = firstvar & secondvar

Либо это:

thirdvar = firstvar + secondvar

Это имеет значение? Если так, то почему?

Возможный дубликатThe difference between + and & for joining strings in VB.NET. Peter Mortensen

Ваш Ответ

6   ответов
5

лучше ли использовать String.Format при объединении строк. Обычно код в конечном итоге становится более понятным.

Кроме того, если вы объединяете много раз, рассмотрите возможность использования StringBuilder, а не String.

3

всегда объединяет строки независимо от типов аргументов, в то время как + не будет. Поскольку нет недостатка в использовании & amp; более + в противном случае, в ситуациях, когда вам явно требуется объединение строк, это предпочтительно. Это также делает смысл кода немного более понятным.

2

ает для конкатенации строк, но не считается правильным и иногда может привести к непредвиденным результатам.

Какие непредвиденные результаты?
Когда это приведет к непредвиденным результатам? Пожалуйста, уточните, чтобы получить полный ответ.
Смотрите мой ответ ниже для непредвиденного результата
Это больше не относится к VB.NET - VB6 и ранее было таким образом - vb.net использует оператор + .NET для среды выполнения .NET, что поддерживается отлично. & Амп; это псевдоним для этого в VB.NET.
Рид прав, мой длительный опыт работы с VB6 привел меня к неверному ответу. Я тестировал оба в VB.Net и оба работают должным образом. Тем не менее, я бы все же использовал амперсанд для ясности, как отметил другой автор.
0

ого» - это зависитheavily что вы объединяете

In short, i would use "&" for strings and "+" only for arithmetical operations

Зачем? Взгляни наhttps://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

Все эти комбинации с переключениемstrict-опция подобна бросанию кубика для компилятора ... и никогда не очевидна для читателя.

Я тоже добавлюhttps://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators#differences-between-the-two-concatenation-operators с четким утверждением:

The + Operator has the primary purpose of adding two numbers.

2

& quot; оператор для обратной совместимости в VB 6 и более ранних версиях, где & amp; был оператором конкатенации строк, и + не работал для текста.

Есть разница, если один из ваших двух операндов не является строкой, так какBdukes указал, Однако в этой ситуации я настоятельно рекомендую использовать String.Format или StringBuilder (в зависимости от количества / типов операций) для создания результирующей строки из смешанных типов.

В целом, я бы рекомендовал использовать + по одной причине. Если вы когда-нибудь решите перевести код на другой язык (например, C #), оператор + будет больше соответствовать переведенной версии. Вероятно, людям, пришедшим с другого языка, будет проще понять и следовать вашему коду.

Они естьnot идентичны в VB.NET, смотрите мой ответ для уточнения.
Отредактированный ответ для компенсации.
Хороший вопрос - я всегда забываю об этом (хотя я никогда не вижу, что «1» и «2» как то, что я считаю уместным;))
@Pavel: Вы бы не использовали string.format, если один из ваших операндов НЕ является строкой? Это было то, что я прямо предложил.
Я бы не рекомендовалString.Format() ни за что, тем более за выделенного оператора&, чтобы соединить строки. Я также не рекомендуюStringBuilder когда количество входных строк известно заранее, так какString.Concat (который является то, что& будет расширяться для цепных вызовов), и& сам будет понятнее.
52

+ а также& операторыnot идентичны в 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'

Итак, моя рекомендация (кроме того, чтобы избегать смешивания таких типов) заключается в использовании& при конкатенации строк, просто чтобы убедиться, что ваши намерения понятны компилятору, и избежать ошибок, которые невозможно найти при использовании+ оператор для объединения.

Спасибо за разъяснение этого для меня! ErocM
Спасибо за напоминание. Я всегда забываю об этом (по причинам, которые я описал в моем новом редакторе).
Оператор «+» указывает на ваше намерение добавить цифры & quot; неправда. Как правило, это указывает на ваше намерение добавить две вещи вместе (не забывайте о перегрузке операторов!) И будет отлично работать для двух строк. Единственное преимущество& является то, что это всегда будет приводить к конкатенации строк и будет преобразовывать все операнды в строки. Тем не менее, это все еще преимущество, поэтому его использование - хорошая идея.
Молодцы бдукес. Так что, в конце концов, я был прав, хотя и не знал этого, лол.
Просто столкнулся с проблемой, используя+ вместо&, Сделал что-то вроде этого:<%# ResolveUrl("~/page.aspx?id=" + Eval("Id")) %>, Поскольку ID являетсяIntegerVB пытается преобразовать левую сторону (URL) в числовой тип и выдает исключение, когда это не может.

Похожие вопросы