Амперсанд против плюс для объединения строк в VB.NET

Есть ли в VB.NET преимущества использования & для объединения строк вместо +?

Например

Dim x as String = "hello" + " there"

vs.

Dim x as String = "hello" & " there"

Да, я знаю, что для многих конкатенаций строк я бы хотел использовать StringBuilder, но это скорее общий вопрос.


person dcp    schedule 09.06.2010    source источник
comment
@Tim - Спасибо, я искал, но почему-то не нашел этого, спасибо за публикацию.   -  person dcp    schedule 09.06.2010


Ответы (5)


Я слышал хорошие, веские аргументы в пользу обоих операторов. Какой аргумент победит, во многом зависит от вашей ситуации. Единственное, что я могу сказать, это то, что вы должны стандартизировать одно или другое. Код, который смешивает эти два понятия, вызовет путаницу позже.

Я вспомнил два аргумента в пользу &:

  • Если вы не используете Option Strict и у вас есть две числовые строки, компилятору легко перепутать ваше значение оператора + с арифметическим сложением.
  • Если вы обновляете много старого кода эпохи vb6, это помогает не преобразовывать операторы конкатенации (и помните: мы хотим согласованности).

И для +:

  • Если у вас магазин смешанных vb / C #, хорошо иметь только один оператор конкатенации. Это упрощает перемещение кода между языками и означает гораздо меньшую необходимость переключения контекста для программистов при перемещении между языками.
  • & почти уникален для VB, в то время как + между строками на многих языках понимается как конкатенация, так что вы получаете кое-что в удобочитаемости.
person Joel Coehoorn    schedule 09.06.2010
comment
Проблема с & для конкатенации строк. Из документации Оператор & всегда расширяет свои операнды до String, независимо от того, настройки Option Strict. Так, например, "Hello " & 2.5 незаметно преобразует 2.5 в строку, используя региональные настройки (вы можете получить "2.5" или "2,5"). Хорошо, если это было то, что ты хотел. Я бы скорее был вынужден указать это явно. - person MarkJ; 19.09.2011
comment
@MarkJ На самом деле VB.NET здесь лучше, чем C #, даже потому, что, по крайней мере, у вас есть выбор использовать &. В C # конкатенация строк может всегда выполнять неявное ToString, и отключить это невозможно. Не могу передать, как сильно я это ненавижу. Рад видеть, что VB.NET понял это правильно (шокирует!) - person Roman Starkov; 07.05.2013

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

Вы также можете использовать оператор + для объединения строк. Однако во избежание двусмысленности вместо этого следует использовать оператор &.

person Walter    schedule 09.06.2010
comment
+1 за использование документов MSDN, а не личного мнения! Оба действительны, но только один является официальным. :) Вы также можете указать ссылку на документы на & - msdn.microsoft. ru / en-us / library / wfx50zyk.aspx - person Dan Atkinson; 21.11.2013

Я предпочитаю использовать & для конкатенации строк в VB.NET

Одна из причин этого - избежать путаницы, например

MessageBox.Show(1 & 2) ' "12"
MessageBox.Show(1 + 2) ' 3
person codingbadger    schedule 09.06.2010
comment
Это проблема только с Option Strict выкл. - person Joel Coehoorn; 09.06.2010
comment
Хороший момент - хотя я думаю, что по умолчанию выключено? - person codingbadger; 09.06.2010
comment
Привет, Барри, было бы неплохо также записать результат каждого примера. Например. как комментарий // "12" vs //"3". Это поможет проиллюстрировать вашу точку зрения для тех, кто еще не знает разницы. - person Levite; 09.03.2015

Безопаснее использовать &, поскольку вы ясно даете понять компилятору свое намерение (я хочу объединить эти два значения, и оба они должны быть преобразованы в строки).

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

Например:

1 + "1" = 2 ' this fails if option strict is on
1 & "1" = 11

Изменить: хотя, если вы объединяете не-строку, вам, вероятно, все равно следует использовать какой-то лучший метод.

person Hans Olsson    schedule 09.06.2010

Я полагаю, это исторический вопрос (не в .NET Visual Basic используется &, не знаю, почему они ввели знак +) и дело вкуса (я предпочитаю &, потому что мы объединяем строки, мы не добавляем их ...).

person PhiLho    schedule 09.06.2010
comment
Хороший аргумент в пользу того, что + перегружен арифметическими операторами, тогда как & обычно означает просто и. - person Jordan Rieger; 19.07.2012
comment
Мы объединяем строки, а не побитовое - и их. К сожалению, ни один из этих вариантов оператора не лишен перегруженного смысла. - person ESV; 13.11.2013
comment
@ESV Я не думаю, что в Visual Basic (до .NET) были побитовые операторы, поэтому там не было перегруженного смысла. Но действительно, этот аргумент недействителен для языков, использующих & для других целей. - person PhiLho; 13.11.2013