Он близок к тернарному/условному оператору С#, как предлагали несколько человек, но это не точная замена. Тернарный оператор 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;
}
Это оператор ?:.
or.Fields["Currency"].Value == "USD" ? 100 : 0;
Вы можете использовать оператор ?: для выполнения эквивалентного кода:
intCurrency = or.Fields["Currency"].Value = "USD" ? 100 : 0;
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
Как уже говорилось, вы ищете условный operator:
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
Однако, как точка исправления, это не "оценка короткого замыкания". Вычисление с коротким замыканием означает, что как только логическое выражение может быть надежно определено, дальнейшая оценка не выполняется (это равносильно обнаружению условия true
в выражении или
или false. условие
в выражении и
).
Хотя можно комбинировать логические выражения в условном операторе точно так же, как и в любом другом (например, в операторе if
), и это выражение будет использовать вычисление с коротким замыканием, оно не имеет ничего общего сам по себе с условным оператором.
Следует отметить важное отличие: в то время как функция VB.NET Iif
оценивает как истинные, так и ложные выражения, условный оператор C# оценивает только выражение, выбранное логическим условием (что делает его поведение более как традиционное выражение if
). Это могло бы быть важно, если бы код VB.NET полагался на оба вычисляемых выражения.
Да, это вопросительный знак (он же условный оператор).
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
Это невероятно педантично, но ближайшим эквивалентом 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";
Я знаю, что на этот вопрос уже отвечали другие... но я решил уточнить. Если вам интересно узнать больше, это называется тройным оператором или также широко известен как условный оператор.