Sprintstar
Sprintstar

Reputation: 8159

Automatic casting to string in C# and VB.NET

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

Answers (4)

TheCodeJunkie
TheCodeJunkie

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.

&Operator (Visual Basic)

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)

+Operator (Visual Basic)

Upvotes: 5

Loris
Loris

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

chakrit
chakrit

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

Jon Skeet
Jon Skeet

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

Related Questions