2008-11-07 1 views
4

я мог бы сделать это в C# ..Автоматической отливка строки в C# и VB.NET

int number = 2; 
string str = "Hello " + number + " world"; 

.е ул заканчивается, как «Hello 2 мира».

В VB.NET я мог бы сделать это ..

Dim number As Integer = 2 
Dim str As String = "Hello " + number + " world" 

..но я получаю InvalidCastException «Преобразование из строки„Hello“к типу„двойной“не является действительным.»

Я знаю, что я должен использовать .ToString() в обоих случаях, но что здесь происходит с кодом, как есть?

+1

На самом деле, вы не должны использовать ToString, а скорее String.Format всякий раз, когда вам нужно форматировать текст. Ваши международные пользователи будут вам благодарны. – OregonGhost 2008-11-07 09:54:53

ответ

14

В VB Я считаю, что оператор конкатенации является &, а не + так попробуйте это:

Dim number As Integer = 2 
Dim str As String = "Hello " & number & " world" 

В основном, когда VB видит + Я подозреваю, что он пытается сделать численное сложение или использовать оператор сложения, определенный в типе (или, без сомнения, другие более сложные вещи, основанные на опциях ...) Обратите внимание, что System.String не определяет оператор добавления - все это скрыто в компиляторе по звонкам до String.Concat. (Это позволяет гораздо более эффективную конкатенацию нескольких строк.)

5

Visual Basic проводит различие между операторами и &. & сделает преобразование в строку, если выражение не является строкой.

&Operator (Visual Basic)

Оператор + использует более сложную логику оценки, чтобы определить, что сделать окончательный бросок в (например, это зависит от таких вещей, как Option Strict конфигурации)

+Operator (Visual Basic)

1

Оператор VB plus (+) неоднозначен.

Если вы не имеете Option Explicit на, если память мне не изменяет, то можно сделать так:

Dim str = 1 + "2" 

и получает ул, как Integer = 3.

Если вы явно хотите конкатенации, используйте оператор амперсанд

Dim str = "Hello " & number & " world" 

И это будет счастливо преобразовать число в строку для вас.

Я думаю, что это поведение оставлено для обратной совместимости.

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

3

Я предлагаю держаться подальше от необработанной конкатенации строк, если это возможно.

Хорошие альтернативы используют строку.Формат:

str = String.Format("Hello {0} workd", Number) 

Или с помощью класса System.Text.StringBuilder, который также является более эффективным на больших струнных сцеплений.

Оба автоматически передают свои параметры в строку.

 Смежные вопросы

  • Нет связанных вопросов^_^