Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
¿Cómo refactorizar estos casos de cambio para manejar la elección del usuario en lenguaje natural?

Estoy escribiendo varias declaraciones de cambio anidadas con bastantes casos en algunos lugares.

Estoy tratando de encontrar una manera de crear una lista de casos para luego hacer referencia en declaraciones de cambio posteriores.

¿Hay alguna forma de hacer esto?

Ciertamente limpiaría mi código.

Por ejemplo, tengo cuatro casos separados para una respuesta "sí".

Estoy buscando una manera de almacenar estos cuatro casos en una variable y llamar a esa variable cada vez que quiero usarlos en un interruptor.

 Console.Write("\nWere you feeling exhausted? "); response = Console.ReadLine().ToLower(); Console.Clear(); switch (response) { case "yes": case "y": case "yep": case "yeah": { goto ThreeTwo; } case "no": case "n": case "nope": case "nah":
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una buena manera limpia de hacer esto es primero declarar una enum para representar los valores de respuesta. Necesitará "Sí", "No" e "Indefinido" (este último para representar una respuesta que no es ni "Sí" ni "No"):

 public enum YesOrNo { Undefined, Yes, No }

Luego puede envolver la lógica de detección sí/no en una clase. Hay muchas maneras de hacer esto; aquí hay uno simple (en su lugar, podría usar un diccionario, pero para un número tan pequeño de cadenas no es realmente necesario, y estoy tratando de mantener esto lo más simple posible):

 public static class YesOrNoDetector { static readonly string[] _yesAnswers = { "yes", "y", "yep", "yeah", "affirmative" }; static readonly string[] _noAnswers = { "no", "n", "nah", "nope", "negative" }; public static YesOrNo Detect(string answer) { if (_yesAnswers.Contains(answer.ToLower())) return YesOrNo.Yes; if (_noAnswers.Contains(answer.ToLower())) return YesOrNo.No; return YesOrNo.Undefined; } }

(Observe cómo también maneja las respuestas en mayúsculas al convertir la cadena a minúsculas antes de comparar).

Entonces su código original se convierte en algo como:

 switch (YesOrNoDetector.Detect(response)) { case YesOrNo.Yes: { goto ThreeTwo; // Please get rid of this goto! } case YesOrNo.No: { // Handle "No". break; } case YesOrNo.Undefined: { // Handle incorrect answer. break; } }
over 4 years ago · Santiago Trujillo Denunciar

0

Tener esta enumeración:

 public enum Answers { Other, Yes, No }

Se puede añadir cualquier posibilidad esperada.

También se pueden crear varias enumeraciones para varios casos de uso.

Aquí Other significa no definido, no previsto, desconocido, etc.

Podemos definir esta tabla de adjudicación/distribución/despacho:

 using System; using System.Collections.Generic; readonly Dictionary<Answers, List<string>> AcceptedAnswers = new Dictionary<Answers, List<string>> { { Answers.Yes, new List<string> { "yes", "y", "yep", "yeah" } }, { Answers.No, new List<string> { "no", "n", "nope", "nah" } } };

Por lo tanto, podemos definir fácilmente sinónimos para cada valor de enumeración.

Y lo usaremos definiendo este método de verificación:

 Answers GetAnswer(string input) { foreach ( Answers item in Enum.GetValues(typeof(Answers)) ) if ( AcceptedAnswers.ContainsKey(item) ) if ( AcceptedAnswers[item].Contains(input) ) return item; return Answers.Other; }

Prueba

 Console.WriteLine("Do you agree?"); var answer = GetAnswer(Console.ReadLine()); Console.WriteLine(); Console.WriteLine($"Your answer is: {answer}.");

Producción

 Do you agree? yep Your answer is: Yes.

Uso avanzado

 bool retry; do { retry = false; Console.WriteLine("Do you agree?"); var answer = GetAnswer(Console.ReadLine()); Console.WriteLine(); Console.WriteLine($"Your answer is: {answer}."); switch ( answer ) { case Answers.Yes: // ... break; case Answers.No: // ... break; default: Console.WriteLine(); Console.WriteLine("I don't understand :("); Console.WriteLine(); retry = true; break; } } while ( retry );
 Do you agree? I don't know Your answer is: Other. I don't understand :( Do you agree? yeah Your answer is: Yes.

No use goto más de una vez por siglo.

¿Cómo resolver este error de compilación "Usando la variable local no asignada 'hak'" al usar goto?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda