Что такое IIF в C #? [дубликат]

14
задан Community 23 May 2017 в 10:31
поделиться

9 ответов

Он близок к тернарному/условному оператору С#, как предлагали несколько человек, но это не точная замена. Тернарный оператор C# выполняет оценку короткого замыкания, что означает, что возникает только побочный эффект оцениваемого предложения. В VB.Net функция Iif не реализует короткое замыкание и будет оценивать оба побочных эффекта.

Кроме того, функция Iif в VB.Net слабо типизирована. Он принимает и возвращает значения типа Object. Тернарный оператор C# строго типизирован.

Ближайший эквивалент, который вы можете написать, следующий. Ввод значений в аргументы вызывает оценку их побочных эффектов.

public static object Iif(bool cond, object left, object right) {
  return cond ? left : right;
}

Или немного удобнее

public static T Iif<T>(bool cond, T left, T right) {
  return cond ? left : right;
}
38
ответ дан 1 December 2019 в 05:54
поделиться

Это оператор ?:.

 or.Fields["Currency"].Value == "USD" ? 100 : 0;

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

2
ответ дан 1 December 2019 в 05:54
поделиться

Вы можете использовать оператор ?: для выполнения эквивалентного кода:

intCurrency = or.Fields["Currency"].Value = "USD" ? 100 : 0;
1
ответ дан 1 December 2019 в 05:54
поделиться
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
1
ответ дан 1 December 2019 в 05:54
поделиться

Как уже говорилось, вы ищете условный operator:

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

Однако, как точка исправления, это не "оценка короткого замыкания". Вычисление с коротким замыканием означает, что как только логическое выражение может быть надежно определено, дальнейшая оценка не выполняется (это равносильно обнаружению условия true в выражении или или false. условие в выражении и ).

Хотя можно комбинировать логические выражения в условном операторе точно так же, как и в любом другом (например, в операторе if), и это выражение будет использовать вычисление с коротким замыканием, оно не имеет ничего общего сам по себе с условным оператором.

Следует отметить важное отличие: в то время как функция VB.NET Iif оценивает как истинные, так и ложные выражения, условный оператор C# оценивает только выражение, выбранное логическим условием (что делает его поведение более как традиционное выражение if). Это могло бы быть важно, если бы код VB.NET полагался на оба вычисляемых выражения.

1
ответ дан 1 December 2019 в 05:54
поделиться

Да, это вопросительный знак (он же условный оператор).

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
16
ответ дан 1 December 2019 в 05:54
поделиться

Это невероятно педантично, но ближайшим эквивалентом IIf в C# является

intCurrency = ((Func<bool, object, object, object>)((x, y, z) => x ? y : z))(or.Fields["Currency"].Value == "USD", 100, 0);

Однако мне интересно, действительно ли вас интересует тернарный оператор VB. Таким образом, следующее в VB

intCurrency = IIf(or.Fields("Currency").Value = "USD", 100, 0) 

может быть лучше записано как (обратите внимание на разницу между IIf и If)

intCurrency = If(or.Fields("Currency").Value = "USD", 100, 0) 

, что в C# точно такое же, как

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

Еще один интересный Дело в том, что If удваивается как нулевой оператор объединения.

Dim text As String = Nothing
text = If(text, "Nothing")

что в C# точно такое же, как

string text = null;
text = text ?? "null";
4
ответ дан 1 December 2019 в 05:54
поделиться

or.Fields("Валюта").Value = "USD" ? 100 : 0

0
ответ дан 1 December 2019 в 05:54
поделиться

Я знаю, что на этот вопрос уже отвечали другие... но я решил уточнить. Если вам интересно узнать больше, это называется тройным оператором или также широко известен как условный оператор.

3
ответ дан 1 December 2019 в 05:54
поделиться