2016-11-16 6 views
-3

Я хочу сделать следующее условие, но это неправильно. Что можно сделать, чтобы сделать его правильным?Использование ИЛИ внутри тернарного оператора

row["Total Serviceable Offers"].ToString() == "a" || "b" ? "0" : "c"; 

У нас есть || внутри тернарного состояния?

+4

Просто не ... Длинная рука версия будет гораздо более удобным для чтения – Liam

+0

Согласовано с @Liam. Как только вы выбрасываете второе условие, вы как бы побеждаете цель использования сокращений для простоты. –

+0

@DangerZone Я почти согласен, я чувствую, что тройка в порядке, если у вас есть два условия, представленные как 'или', но если вы используете 'else', то он теряет свою цель. –

ответ

3
string theRow = row["Total Serviceable Offers"].ToString(); 
(theRow == "a" || theRow == "b") ? "0" : "c"; 
0

Я просто побежал int f = (g > 0 || h > 0) ? j : k; в тестовой программе, и это не ошибка, так что в значительной степени да, можно.

Просто будьте осторожны с логикой, удачи.

1

Вы ищете этот синтаксис

(row["Total Serviceable Offers"].ToString() == "a" || row["Total Serviceable Offers"].ToString() == "b") ? "0" : "c"; 

Но я предпочел бы короткий подход с Contains()

new[]{"a","b"}.Contains(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
3

Можем ли мы || внутри тройное состояние?

Да, вы можете. Но так, как вы это сделали, || нас между
row["Total Serviceable Offers"].ToString() == "a", булевым выражением и "b", строковым выражением. Вот почему ваш код не компилируется.

Вы можете изменить его на Contains или Any выражение или создать вспомогательный метод, если есть больше сравнений, чем показывает фрагмент кода.

Вот несколько способов, чтобы переписать выражение:

new[]{"a", "b"}.Contains(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
new[]{"a", "b"}.Any(s => s == row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
IsAorB(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 

... 

bool IsAorB(string s) { 
    return s == "a" || s == "b"; 
}