x ? a : b
означает if (x == true) then a else b
x ?? y
означает if (x != null) then x else y
но с изюминкой, поскольку оба являются выражениями, а не утверждениями типа IF.
Это позволяет вам написать var z = x ? a : b;
, чтобы объединить объявление и присваивание в одну строку вместо многострочного варианта:
type z;
if (x == true)
z = a;
else
z = b;
Type?
является сокращением для Nullable<Type>