Это оператор слияния null, очень похожий на троичный (немедленный-если) оператор. Смотри также ?? Оператор - MSDN .
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
расширяется до:
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
, который расширяется до:
if(formsAuth != null)
FormsAuth = formsAuth;
else
FormsAuth = new FormsAuthenticationWrapper();
В английском это означает «Если то, что слева, не равно нулю, используйте это, в противном случае используйте то, что справа».
Обратите внимание, что вы можете использовать любое их количество по порядку. Следующий оператор назначит первый ненулевой Answer#
для Answer
(если все ответы нулевые, тогда Answer
нулевой):
string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;
Также стоит упомянуть, хотя приведенное выше расширение концептуально эквивалентно, результат каждого выражения оценивается только один раз. Это важно, если, например, выражение является вызовом метода с побочными эффектами. (Благодарим @Joey за указание на это.)