Operador estranho precedência com ?? (operador coalescente nulo)

Recentemente, tive um bug estranho no qual concatenava uma string com umint? e adicionando outra string depois disso.

Meu código era basicamente o equivalente a isso:

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

Surpreendentemente, isso será executado e compilado sem avisos ou erros de tipo incompatíveis, assim como:

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

E isso resulta em um erro inesperado de incompatibilidade de tipo:

int? x=10;
string s = "foo" + x ?? 0 + 12;

Como será este exemplo mais simples:

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

Alguém pode explicar como isso funciona para mim?

questionAnswers(2)

yourAnswerToTheQuestion