Мне было интересно узнать о знаках ??
в C#
коде. Для чего это? И как я могу его использовать?
А что насчет int?
? Это int, допускающий значение NULL?
Мне было интересно узнать о знаках ??
в C#
коде. Для чего это? И как я могу его использовать?
А что насчет int?
? Это int, допускающий значение NULL?
Он называется «нулевым оператором объединения» и работает примерно так:
Вместо того, чтобы делать:
int? number = null;
int result = number == null ? 0 : number;
Теперь вы можете просто сделать:
int result = number ?? 0;
call instance !0 valuetype [mscorlib]System.Nullable
1 ‹int32› :: GetValueOrDefault () `)
- person Aidiakapi; 08.09.2011
Это нулевой оператор объединения. Он был введен в C # 2.
Результатом выражения a ?? b
является a
, если это не null, или b
в противном случае. b
не оценивается, если в этом нет необходимости.
Две приятные вещи:
Общий тип выражения - тип второго операнда, что важно, когда вы используете типы значений, допускающие значение NULL:
int? maybe = ...;
int definitely = maybe ?? 10;
(Обратите внимание, что вы не можете использовать тип значения, не допускающий значения NULL, в качестве первого операнда - это было бы бессмысленно.)
Правила ассоциативности означают, что вы можете очень легко связать это. Например:
string address = shippingAddress ?? billingAddress ?? contactAddress;
Это будет использовать первое ненулевое значение из адреса доставки, выставления счета или контактного адреса.
a
только один раз.
- person Jon Skeet; 18.12.2009
Это оператор объединения. По сути, это сокращение для следующих
x ?? new Student();
x != null ? x : new Student();
Документация MSDN по оператору
Это новый оператор Null Coalesce.
?? Оператор возвращает левый операнд, если он не равен нулю, или же возвращает правый операнд.
Вы можете прочитать об этом здесь: http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx
Это ярлык для:
Text = (category == null ? "Home" : category);
это оператор объединения. он вернет другое значение, если первое значение равно нулю
string value1 = null;
string value2 = "other";
string value3 = value1 ?? value2; // assigns "other" to value 3
он проверяет, является ли категория нулевой - в этом случае нулевое значение заменяется на «Главная».
Одно из моих любимых применений оператора объединения с нулевым значением - это избегать операторов if в моем коде (я думаю, что операторы if уродливы и в большинстве случаев просто загромождают вещи). Например, возьмем типичный сценарий, в котором можно выбрать загрузку чего-либо из кеша, если он доступен, в противном случае загрузить из базы данных и заполнить кеш.
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. Каждая функция выполняет ровно одну четко идентифицируемую функцию.
если категория не указана, текст станет «Домой».
Возвращает первое ненулевое значение. Удобно.
int? - это тип int, допускающий значение NULL, что означает, что он может иметь значения нормального int и NULL. Подробнее читайте в this.
Это оператор объединения с нулем. Он используется с типами, допускающими значение NULL (среди прочего , Извините :)