Конкатные строки по & и + в VB.Net - PullRequest
23 голосов
/ 12 января 2011

Есть ли разница между операторами & и + при конкатенации строки?если да, то в чем разница?А если нет, то почему ниже кода генерируется исключение?

Пример:

    Dim s, s1, t As String
    Dim i As Integer

    s1 = "Hello"
    i = 1

    s = s1 & i
    t = s1 + i  //Exception here

    If s = t Then
        MessageBox.Show("Equal...")
    End If

Ответы [ 8 ]

31 голосов
/ 12 января 2011

& и + оба являются операторами конкатенации, но когда вы указываете целое число при использовании +, vb.net пытается преобразовать «Hello» в целое число, чтобы выполнить сложение. Если вы измените «Hello» на «123», вы получите результат 124.

22 голосов
/ 12 января 2011
  • & используется только для конкатенации строк.
  • + перегружен для объединения строк и арифметического сложения.

Двойное назначение + приводит к путанице, как и в вашем вопросе.Особенно, когда Option Strict равен Off, потому что компилятор добавит неявные приведения к вашим строкам и целым числам, чтобы попытаться понять ваш код.

Мои рекомендации

  • Вам определенно следует включить Option Strict On, тогда компилятор заставит вас добавлять явные приведения там, где он считает это необходимым.
  • Вам следует избегать использования + для конкатенации из-за неоднозначности с арифметическим сложением.

Обе эти рекомендации также есть в книге Microsoft Press Практические рекомендации и рекомендации для VB и C # (разделы 1.16, 21.2)

4 голосов
/ 12 января 2011

Возможно, у вас включен Option Strict (что хорошо), и компилятор говорит вам, что вы не можете добавить строку и int. Попробуйте это:

t = s1 & i.ToString()

2 голосов
/ 12 января 2011

Поскольку ваш вопрос подтверждает, что они различны: & является ТОЛЬКО конкатенацией строк, + перегружен как с обычным сложением, так и с конкатенацией.

В вашем примере:

  • , поскольку один из операндов + является целым числом, VB пытается преобразовать строку в целое число, и, поскольку ваша строка не является числовой, она выбрасывает; и

  • & работает только со строками, поэтому целое число преобразуется в строку.

0 голосов
/ 29 ноября 2018

Попробуй это.Это казалось почти простым, чтобы быть правым.Просто конвертируйте Integer в строку.Тогда вы можете использовать метод ниже или объединить.

Dim I, J, K, L As Integer
Dim K1, L1 As String

K1 = K
L1 = L
Cells(2, 1) = K1 & " - uploaded"
Cells(3, 1) = L1 & " - expanded"

MsgBox "records uploaded " & K & " records expanded " & L
0 голосов
/ 12 ноября 2017

Вы можете написать '&', чтобы добавить строку и целое число:

processDetails=objProcess.ProcessId & ":" & objProcess.name
message = msgbox(processDetails,16,"Details")

вывод будет:

5577:wscript.exe
0 голосов
/ 12 января 2011

Мои 2 цента:

Если вы объединяете значительное количество строк, вы должны использовать вместо этого StringBuilder. ИМО чище и значительно быстрее .

0 голосов
/ 12 января 2011

Из прежнего конкатенатора строк (sp?) Вы должны рассмотреть возможность использования String.Format вместо конкатенации.

    Dim s1 As String
    Dim i As Integer
    s1 = "Hello"
    i = 1
    String.Format("{0} {1}", s1, i)

Это намного облегчает чтение и поддержку, и я считаю, что ваш код выглядитболее профессиональноСмотрите: код лучше - используйте string.format .Хотя не все согласны с этим Когда лучше использовать String.Format против конкатенации строк?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...