2011-03-14 8 views

Respuesta

15

El operador condicional está diseñado para evaluar alternativas expresiones, no invocando declaraciones alternativas.

Si los dos conjuntos de enunciados lógicamente cada uno tienen el mismo tipo de resultado, que podría refactor para poner cada uno de ellos en un método separado:

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

pero si son lógicamente más que ver con efectos secundarios que evaluar un resultado, usaría un bloque if en su lugar.

2

No se puede, porque el operador condicional es una expresión, no una declaración. Tienes que usar un constructo if-else para lograr lo que estás tratando de hacer.

1

Solo si, por ejemplo, exponen una API fluida y tienen un valor de retorno (es decir, algo que le permite exprimir varios pasos en una sola expresión); por ejemplo:

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

de otra manera? no; solo obtiene una sola expresión para evaluar por caso. Podrías refactorizar a los métodos, por supuesto;

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

que nuevamente asume un valor de retorno.

0

crear una función o un delegado que acepta una serie de argumentos que corresponden al número de expresiones que desea evaluar:

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); 
Cuestiones relacionadas