una republica qué que pueden práctico presentarse instructivo formularios formulario eventos ejercicio declaración declaracion concepto con cambio banco c# switch-statement

republica - Evaluar expresiones en declaraciones de cambio en C#



instructivo formulario no 1 banco de la republica (9)

Tengo que implementar lo siguiente en una declaración switch :

switch(num) { case 4: // some code ; break; case 3: // some code ; break; case 0: // some code ; break; case < 0: // some code ; break; }

¿Es posible hacer que la declaración del interruptor evalúe el case < 0 ? Si no, ¿cómo podría hacer eso?


A la inversa también sería posible (en relación con la respuesta de Jon Skeet):

switch(num) { case a: break; default: if( num < 0 ) {} break; }


La única forma en que podría pensar (y realmente no lo recomiendo) sería la siguiente:

int someValue; switch (Math.Max(someValue, -1)) { case -1: // will be executed for everything lower than zero. break; case 0: // will be executed for value 0. break; case 1: // will be executed for value 1. break; default: // will be executed for anything else. break; }


Lo que podrías hacer es usar un delegado como este.

var actionSwitch = new Dictionary<Func<int, bool>, Action> { { x => x < 0 , () => Log.Information("0")}, { x => x == 1, () => Log.Information("1")}, { x => x == 2, () => Log.Information("2")}, { x => x == 3, () => Log.Information("3")}, { x => x == 4, () => Log.Information("4")}, { x => x == 5, () => Log.Information("5")}, }; int numberToCheck = 1; //Used like this actionSwitch.FirstOrDefault(sw => sw.Key(numberToCheck)).Value();

Simplemente intercambie lo que desea realizar donde está la Información de registro ("x") y tiene su declaración de "cambio".

Necesitará algún tipo de manejo de errores si busca una clave que sea "encontrada" por el Func.


No puede - cambiar / caso es solo para valores individuales. Si desea especificar condiciones, necesita un "si":

if (num < 0) { ... } else { switch(num) { case 0: // Code case 1: // Code case 2: // Code ... } }


No puede usar comparaciones en switches como podría en VB, tiene 2 opciones aquí, reemplace el valor que enciende con un valor conocido y use eso o, si se refiere a todos los demás casos, puede usar la cláusula predeterminada:

switch(num) { case 4: // some code ; break; case 3: // some code ; break; case 0: // some code ; break; default: // some code ; break; }

Tenga en cuenta que esto no es exactamente como usted lo solicitó: cualquier valor que no sea 0,3,4 terminará en la cláusula deafult:


Puede hacer algo como esto al final de su declaración de cambio:

default: if(num < 0) { ... // Code } break;


Sé que este tema es bastante antiguo, pero si alguien sigue buscando la respuesta ahora en C # 7, es posible. Aquí hay un ejemplo:

switch (value) { case var expression when value < 0: //some code break; case var expression when (value >= 0 && value < 5): //some code break; default: //some code break; }


Si tu num no puede ser menor que cero:

public int GetSwitch(int num) { return num < 0 ? -1 : num; } switch(GetSwitch(num)) { case 4: // some code ; break; case 3:// some code ; break; case 0: // some code ; break; case -1 :// some code ; break; }

Si puede, use otro número "inexistente" como int.MinValue.


Tendrá que usar si quiere o no. Switch solo es capaz de comparar tu valor con valores constantes.