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)
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#.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With