Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strings and ints, implicit and explicit

Had a coworker ask me this, and in my brain befuddled state I didn't have an answer:

Why is it that you can do:

string ham = "ham " + 4;

But not:

string ham = 4;

If there's an implicit cast/operation for string conversion when you are concatenating, why not the same when assigning it as a string? (Without doing some operator overloading, of course)

like image 323
Rostov Avatar asked Feb 05 '09 20:02

Rostov


2 Answers

When concatenating the compiler turns the statement "ham" + 4 into a call to String.Concat, which takes two object parameters, so the value 4 is boxed and then ToString is called on that.

For the assignment there is no implicit conversion from int to string, and thus you cannot assign 4 to a string without explicitly converting it.

In other words the two assignments are handled very differently by the compiler, despite the fact that they look very similar in C#.

like image 134
Brian Rasmussen Avatar answered Oct 06 '22 00:10

Brian Rasmussen


Binary + operators are predefined for numeric and string types. For numeric types, + computes the sum of its two operands. When one or both operands are of type string, + concatenates the string representations of the operands.

Reference

The assignment operator (=) stores the value of its right-hand operand in the storage location, property, or indexer denoted by its left-hand operand and returns the value as its result. The operands must be of the same type (or the right-hand operand must be implicitly convertible to the type of the left-hand operand).

Reference

like image 35
tvanfosson Avatar answered Oct 06 '22 01:10

tvanfosson