Как я могу написать несколько операторов, используя условный оператор - PullRequest
6 голосов
/ 14 марта 2011

Я пишу условный оператор вместо if else. Но в моем случае у меня есть несколько утверждений следующим образом

if (condition)
{
    statement 1;
    statement 2;
}
else
{
    statement 3;
    statement 4;
}

Как я могу написать то же самое, используя условный оператор ? and :

Ответы [ 4 ]

15 голосов
/ 14 марта 2011

Условный оператор предназначен для оценки альтернативных выражений , а не для вызова альтернативных операторов .

Если два ваших набора операторов логически имеют одинаковый тип результата,вы могли бы рефакторинг поместить каждый из них в отдельный метод:

var result = condition ? Method1() : Method2();

, но если они логически больше связаны с побочными эффектами, чем с оценкой результата, я бы использовалif блок вместо.

2 голосов
/ 14 марта 2011

Вы не можете, потому что условный оператор является выражением, а не оператором. Вы должны использовать конструкцию if-else, чтобы достичь того, что вы пытаетесь сделать.

1 голос
/ 14 марта 2011

Только если, например, они предоставляют свободный API и имеют возвращаемое значение (то есть то, что позволяет сжать несколько шагов в одном выражении); например:

sb = (someCondition) ? sb.Append("foo").Append("bar") 
        : sb.Apppend("cde").Append("fgh");

в противном случае? нет; Вы получаете только одно выражение для оценки в каждом конкретном случае. Конечно, вы можете изменить методы;

var x = (someCondition) ? MethodA() : MethodB();

, который снова принимает возвращаемое значение.

0 голосов
/ 14 марта 2011

Создайте функцию или делегат, который принимает количество аргументов, соответствующее количеству выражений, которые вы хотите оценить:

int i = 7, j = 8;
Func<int, int, int> dummy = ((a,b) => b);
int k = (i < 5) ? dummy(i++, j--) : dummy(i--, j++);
Console.WriteLine("{0}, {1}, {2}", i, j, k);
...