Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

172
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda