Подтвердить что ты не робот

Конкретные строки от & и + в VB.Net

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

Пример:

    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
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

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

t = s1 & i.ToString()

Ответ 4

Как ваш вопрос подтверждает, они разные: & - это только конкатенация строк, + перегружается как с нормальным добавлением, так и с конкатенацией.

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

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

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

Ответ 5

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

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

вывод будет:

5577:wscript.exe

Ответ 6

Из прежней строки concatenater (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 vs string concatenation?

Ответ 7

Мои 2 цента:

Если вы конкатенируете значительное количество строк, вы должны использовать StringBuilder. IMO он чище и значительно быстрее.