Weird operator precedence with ?? (null coalescing operator)

The null coalescing operator has very low precedence so your code is being interpreted as:

int? x = 10;
string s = ("foo" + x) ?? (0 + "bar");

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:

int? x = 10;
string s = ("foo" + x) ?? (0 + 12);
// Error: Operator '??' cannot be applied to operands of type 'string' and 'int'

The solution of course is to add parentheses:

int? x = 10;
string s = "foo" + (x ?? 0) + "bar";

Leave a Comment