Позвольте мне отметить, что
return foo == null ? null : (int?)foo.Bar;
компилируется с теми же кодами операций, что и
return foo == null ? new Nullable<int>() : new Nullable<int>(foo.Bar);
Версия с оператором if может также компилироваться с теми же кодами операций, так что это действительнопросто вопрос личного вкуса.Как насчет этой версии:
return foo == null ? (int?)null : foo.Bar;
То же самое.Если вы хотите использовать его, вы должны указать на обнуляемую часть во втором или третьем операнде условного оператора.