I have a method like this: void m1(string str)
and have a class like this:
public class MyClass
{
public bool b1 { set; get; }
//and ot
This follows the rules of the C# language specification around string concatenation. See section 7.8.4 of the C# 4 spec (the addition operator)
String concatenation:
string operator +(string x, string y); string operator +(string x, object y); string operator +(object x, string y);
These overloads of the binary
+
operator perform string concatenation. If an operand of string concatenation isnull
, an empty string is substituted. Otherwise, any non-string argument is converted to its string representation by invoking the virtualToString
method inherited from type object. IfToString
returnsnull
, an empty string is substituted.
If you didn't expect that to happen, may I ask what you expected the result of the "abcdef" + c1
expression to be?
Note that m1
, IClass2
and Class2
are irrelevant to what's happening here - it's only the concatenation expression which is really relevant: that's what's triggering the call to ToString()
, regardless of what's later happening to that string.