Recently I had a weird bug where I was concatenating a string with an int? and then adding another string after that.
My code was basically the equivalent of this:
int? x=10;
string s = "foo" + x ?? 0 + "bar";
Amazingly enough this will run and compile without warnings or incompatible type errors, as will this:
int? x=10;
string s = "foo" + x ?? "0" + "bar";
And then this results in an unexpected type incompatibility error:
int? x=10;
string s = "foo" + x ?? 0 + 12;
As will this simpler example:
int? x=10;
string s = "foo" + x ?? 0;
Can someone explain how this works to me?
The null coalescing operator has very low precedence so your code is being interpreted as:
In this example both expressions are strings so it compiles, but doesn’t do what you want. In your next example the left side of the
??operator is a string, but the right hand side is an integer so it doesn’t compile:The solution of course is to add parentheses: