Another thing to consider is that the coalesce operator doesn't call the get method of a property twice, as the ternary does.
So there are scenarios where you shouldn't use the ternary operator, for example:
public class A
{
var count = 0;
private int? _prop = null;
public int? Prop
{
get
{
++count;
return _prop
}
set
{
_prop = value;
}
}
}
If you use:
var a = new A();
var b = a.Prop == null ? 0 : a.Prop;
the getter will be called twice and the count variable will be equal to 2, and if you use:
var b = a.Prop ?? 0
the count variable will be equal to 1, as it should.