Ответ 1
& и + оба являются операторами конкатенации, но когда вы указываете целое число при использовании +, vb.net пытается передать "Hello" в integer для добавления. Если вы измените "Hello" на "123", вы получите результат 124.
Есть ли разница между операторами 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
& и + оба являются операторами конкатенации, но когда вы указываете целое число при использовании +, vb.net пытается передать "Hello" в integer для добавления. Если вы измените "Hello" на "123", вы получите результат 124.
&
используется только для конкатенации строк.+
перегружен для выполнения как конкатенации строк, так и арифметического добавления.Двойная цель +
приводит к путанице, точно так же, как в вашем вопросе. Особенно, когда Option Strict
- Off
, потому что компилятор добавит неявные отклики на ваши строки и целые числа, чтобы попытаться понять ваш код.
Мои рекомендации
Option Strict On
, тогда компилятор заставит вас добавлять явные отбрасывания, где он считает, что они необходимы.+
для конкатенации из-за двусмысленности с арифметическим добавлением.Обе эти рекомендации также содержатся в книге Microsoft Press Практические рекомендации и рекомендации для VB и С# (разделы 1.16, 21.2)
Вероятно, вы включили Option Strict (что хорошо), и компилятор говорит вам, что вы не можете добавить строку и int. Попробуйте следующее:
t = s1 & i.ToString()
Как ваш вопрос подтверждает, они разные: &
- это только конкатенация строк, +
перегружается как с нормальным добавлением, так и с конкатенацией.
В вашем примере:
потому что один из операндов в +
является целым числом, VB пытается преобразовать строку в целое число, и поскольку ваша строка не является числовой, она бросает; и
&
работает только со строками, поэтому целое число преобразуется в строку.
Вы можете написать '&' для добавления строки и целого числа:
processDetails=objProcess.ProcessId & ":" & objProcess.name
message = msgbox(processDetails,16,"Details")
вывод будет:
5577:wscript.exe
Из прежней строки 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?
Мои 2 цента:
Если вы конкатенируете значительное количество строк, вы должны использовать StringBuilder. IMO он чище и значительно быстрее.