Подтвердить что ты не робот

Что это "??" оператор для?

Мне было интересно узнать знаки ?? в коде C#. Для чего это? И как я могу его использовать?

Как насчет int?? Является ли это nullable int?

См. также:

?? Null Coalescing Operator → Что означает слияние?

4b9b3361

Ответ 1

Он называется "нулевым коалесцирующим оператором" и работает примерно так:

Вместо этого:

int? number = null;
int result = number == null ? 0 : number;

Теперь вы можете просто сделать:

int result = number ?? 0;

Ответ 2

Это оператор null коалесценции. Он был введен в С# 2.

Результат выражения a ?? b равен a, если это не null, или b иначе. b не оценивается, если это не требуется.

Две приятные вещи:

  • Общий тип выражения - это второй операнд, который важен, когда вы используете типы значений NULL:

    int? maybe = ...;
    int definitely = maybe ?? 10;
    

    (Обратите внимание, что в качестве первого операнда нельзя использовать тип с недействительным значением - это будет бессмысленно.)

  • Правила ассоциативности означают, что вы можете легко это связать. Например:

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

Это будет использовать первое ненулевое значение из адреса доставки, фактурирования или контакта.

Ответ 3

Это оператор коалесценции. Это, по существу, сокращение для следующих

x ?? new Student();
x != null ? x : new Student();

Документация MSDN на оператора

Ответ 4

Это новый оператор Null Coalesce.

оператор возвращает левый операнд, если он не равен NULL, или возвращает верный операнд.

Вы можете прочитать об этом здесь: http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx

Ответ 5

Это ярлык для:

Text = (category == null ? "Home" : category);

Ответ 6

это оператор коалесценции. он вернет другое значение, если первое значение равно null

string value1 = null;
string value2 = "other";

string value3 = value1 ?? value2; // assigns "other" to value 3

Ответ 7

он проверяет, является ли категория нулевым - в этом случае нулевое значение заменяется на "Главная".

Ответ 8

Одно из моих любимых применений для оператора нулевой коалесценции - это избегать операторов в моем коде (я думаю, что если утверждения уродливы и просто загромождают вещи в большинстве случаев). Например, возьмите типичный сценарий, в котором можно было бы загрузить что-то из кеша, если оно доступно, в противном случае загрузите из db и заполните кеш.

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;

    if (data == null) {
        data = DAL.GetData(some parameters...);
        HttpRuntime.Cache.Add("key", data, ....);
    }

    return data;
}

Мне этот уродливый код. Может быть, я немного анал, но почему бы не реорганизовать это на это?

private SomeData GetDataAndCache() {
    var data = DAL.GetData(some parameters...);
    HttpRuntime.Cache.Add("key", data, ....);
    return data;
}

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;
    return data ?? GetDataAndCache();
}

Это более близко следует за SRP и чище и легче читать, IMO. Функции выполняют ровно одну четко идентифицируемую функцию.

Ответ 9

если категория равна null, текст станет "Главная"

Ответ 10

?? Оператор Null-Coalescing

Int? является нулевым int, что означает, что он может иметь значения нормального int и null. Подробнее читайте этот.

Ответ 11

Возвращает первое непустое значение. Handy.