эквивалент iif в c#
-
03-07-2019 - |
Вопрос
Есть ли какой-нибудь IIf
эквивалент в C#
?Или аналогичный короткий путь?
Решение
C # имеет троичный оператор ?
, как и другие языки стиля C. Однако это не совсем эквивалентно IIf ()
; Есть два важных различия.
Чтобы объяснить первое отличие, аргумент ложной части для этого вызова Другое отличие состоит в том, что Если вы действительно хотите или общая / безопасная для типов реализация: С другой стороны, если вам нужен троичный оператор в VB, Visual Studio 2008 и более поздние версии предоставляют новый IIf ()
вызывает DivideByZeroException
, даже если логический аргумент равен True код>. Р>
IIf(true, 1, 1/0)
IIf ()
- это просто функция, и, как и все функции, все аргументы должны быть оценены перед выполнением вызова. Другими словами, IIf ()
не делает коротким замыканием в традиционном смысле. С другой стороны, это троичное выражение делает короткое замыкание, и поэтому вполне нормально: (true)?1:1/0;
IIf ()
не является безопасным для типов. Он принимает и возвращает аргументы типа Object
. Тернарный оператор является безопасным типом. Он использует вывод типов, чтобы знать, с какими типами он имеет дело. Обратите внимание, что вы можете очень легко это исправить с помощью собственной универсальной реализации IIF (Of T) ()
, но это не так. IIf ()
в C #, вы можете получить его: object IIf(bool expression, object truePart, object falsePart)
{return expression?truePart:falsePart;}
T IIf<T>(bool expression, T truePart, T falsePart)
{return expression?truePart:falsePart;}
If ()
operator , который работает как троичный оператор C #. Он использует вывод типа, чтобы знать, что он возвращает, и это действительно оператор, а не функция. Это означает, что нет проблем с предварительным вычислением выражений, даже если оно имеет семантику функций.
Другие советы
VB.NET:
If(someBool, "true", "false")
C#
someBool ? "true" : "false";
троичный оператор
bool a = true;
string b = a ? "if_true" : "if_false";
Также полезен оператор коалесцирования ??:
VB:
Return Iif( s IsNot Nothing, s, "My Default Value" )
C#:
return s ?? "My Default Value";
booleanExpression ? trueValue : falseValue;
Пример:
string itemText = count > 1 ? "items" : "item";
http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html
Это троичный оператор ?
string newString = i == 1 ? "i is one" : "i is not one";
Это ограничено тем, что вы не можете помещать туда заявления. Вы можете только положить значения (или вещи, которые возвращают / оценивают значения), чтобы вернуть
Это работает («a» является статическим int внутри класса Blah)
Blah.a=Blah.a<5?1:8;
(круглые скобки находятся между символами равенства и знаком вопроса).
Это не работает.
Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");
Таким образом, вы можете использовать только троичный оператор c # для возврата значений. Так что это не совсем укороченная форма if. Javascript и, возможно, некоторые другие языки позволяют размещать в них заявления.