c# asp.net

c# - ¿Cómo puedo cambiar esta condición a la que quiero?



asp.net (10)

Tengo una condición con dos valores. si la condición es igual a 0 , regresa Absent y si es igual a 1 , regresa present . Ahora quiero agregar el tercer valor a mi condición. Si la condición es igual a 3 , devuelve Unacceptable absent .

estas son mis condiciones con dos valores:

(status >= 1 ? "Present" : "Absent")

¿Cómo puedo cambiar la condición?


Como eso:

status == 0 ? "Absent" : status == 1 ? "present" : status == 3 ? "Unacceptable Absent" : 1==1

Espero poder ayudarte.


El mejor enfoque es deshacerse de las demás condiciones, y así es como lo haces:

public static class AppStartupConfig { public static Dictionary<int,string> AttendanceStatus = new Dictionary<int,string>(); public static void InitAppStuff(){ //Bring basic data from database //fill the list looping data for e.g: if(AttendanceStatus.Count == 0){ AttendanceStatus.Add(0,"Absent"); AttendanceStatus.Add(1,"Present"); AttendanceStatus.Add(3,"Unacceptable absent"); } } }

y para usarlo, no necesitará más si no lo hace a través de su aplicación, simplemente ejecute este método en el punto donde se inicia su aplicación y luego obtenga su valor al proporcionar la clave para este diccionario como:

AppStartupConfig.InitAppStuff(); Console.WriteLine(AppStartupConfig.AttendanceStatus[3]); //returns respective string value

Violín de C #


El uso de operadores ternarios anidados sacrifica la legibilidad por brevedad. Recomiendo usar la declaración de cambio humilde en su lugar:

string foo(int status) { switch (status) { case 0: return "Present"; case 1: return "Absent"; case 3: return "Unacceptable absent"; default: throw new ArgumentOutOfRangeException(nameof(status), $"What kind of person passes {status}?"); } }


Puedes usar algo como esto:

status == 0 ? "Absent" : status == 1 ? "Present" : "Unacceptable"

Pero este estilo de código no se puede leer bien. Es mejor usar el diccionario o la instrucción switch / case etc.


Recomiendo algo más legible para el enfoque de @Shubhams como este:

string foo(int status) { if (status == 0) return ("Present"); else if (status == 1) return ("Absent"); else if (status == 2) return ("Somthing else"); else return ("Outside"); }


Si tiene que seguir con el operador ternario, puede modificar el código para satisfacer tres valores.

string tmp = (status == 0 ? "Absent" : (status == 1 ? "Present" : "NA"));


Utilice un diccionario de búsqueda.

//Initialized once in your program var lookup = new Dictionary<int,string> { { 0, "Absent"}, { 1, "Present"}, { 3, "Unacceptably Absent" } }; //Call this whenever you need to convert a status code to a string var description = lookup[status];


puede agregar un estado a prueba de fallos como "NA" y hacerlo de la siguiente manera:

status == 0 ? "Absent" : status == 1? "Present" : status == 3? "Unacceptable Absent" : "NA";


status >= 1 ?(status >2?"third Value":"Present") : "Absent"

Como eso


(status == 0 ? "Absent" : status == 1 ? "Present" : status == 3 ? "Unacceptable" : "Unknown status")

Puede anidar los operadores, de esta manera puede crear un gran árbol de "si no" que, en mi opinión, es algo que pueda leerse. Un interruptor sería más legible.