Reputation: 8159
I could do this in C#..
int number = 2;
string str = "Hello " + number + " world";
..and str ends up as "Hello 2 world".
In VB.NET i could do this..
Dim number As Integer = 2
Dim str As String = "Hello " + number + " world"
..but I get an InvalidCastException "Conversion from string "Hello " to type 'Double' is not valid."
I am aware that I should use .ToString() in both cases, but whats going on here with the code as it is?
Upvotes: 5
Views: 4969
Reputation: 9616
Visual Basic makes a distinction between the +
and &
operators. The &
will make the conversion to a string if an expression is not a string.
The +
operator uses more complex evaluation logic to determine what to make the final cast into (for example it's affected by things like Option Strict configuration)
Upvotes: 5
Reputation: 1992
I'd suggest to stay away from raw string concatenation, if possible.
Good alternatives are using string.format:
str = String.Format("Hello {0} workd", Number)
Or using the System.Text.StringBuilder class, which is also more efficient on larger string concatenations.
Both automatically cast their parameters to string.
Upvotes: 3
Reputation: 61518
The VB plus (+) operator is ambiguous.
If you don't have Option Explicit on, if my memory serves me right, it is possible to do this:
Dim str = 1 + "2"
and gets str as integer = 3.
If you explicitly want a string concatenation, use the ampersand operator
Dim str = "Hello " & number & " world"
And it'll happily convert number to string for you.
I think this behavior is left in for backward compatibility.
When you program in VB, always use an ampersand to concatenate strings.
Upvotes: 1
Reputation: 1500375
In VB I believe the string concatenation operator is & rather than + so try this:
Dim number As Integer = 2
Dim str As String = "Hello " & number & " world"
Basically when VB sees + I suspect it tries do numeric addition or use the addition operator defined in a type (or no doubt other more complicated things, based on options...) Note that System.String
doesn't define an addition operator - it's all hidden in the compiler by calls to String.Concat
. (This allows much more efficient concatenation of multiple strings.)
Upvotes: 16