С# Чувствительность к регистру в Switch-statement

Я немного работаю с операторами switch и хочу знать, как игнорировать чувствительность к регистру, когда дело доходит до входных значений.

Вот мой код:

using System;

namespace SwitchStatements
{
class MainClass
{
    public static void Main(string[] args)
    {
    Start:
        Console.WriteLine("Please Input the Grade");
        char grade = Convert.ToChar(Console.ReadLine());

        switch (grade)
        {
            case 'A':
                Console.WriteLine("Excellent Work!");
                break;
            case 'B':
                Console.WriteLine("Very Good Effort! Just a couple of     Errors =)");
                break;
            case 'C':
                Console.WriteLine("You Passed. Push Yourself Next Time");
                break;
            case 'D':
                Console.WriteLine("Better put in more effort next time. I know you can do better");
                break;
            default:
                Console.WriteLine("Invalid Grade.");
                break;
        }
        Console.ReadKey();
        goto Start;
    }
}
}

Если я помещаю 'a' вместо вместо A, он возвращает ответ по умолчанию.

Могу ли я использовать, возможно, какое-то сравнение? Если да, то где бы я это сказал?

Ответ 1

Вы можете использовать ConsoleKey как условие для switch, код будет выглядеть следующим образом.

var grade =Console.ReadKey().Key;
switch (grade)
{
    case ConsoleKey.A:
        Console.WriteLine("Excellent Work!");
        break;
    case ConsoleKey.B:
        // Something here
        break;    
    case ConsoleKey.C:
        // Something here
        break;

    case ConsoleKey.D:
        // Something here
        break;          
    case ConsoleKey.E:
       // Something here
        break;             
    default:
       // Something here
        break;
}

Так что вы можете избежать преобразования ввода в верхний регистр/нижний регистр, а затем перейти к другому преобразованию в Char. Просто используйте ConsoleKey Перечисление внутри коммутатора.

Ответ 2

Вы можете использовать ToUpper(); Как

Convert.ToChar(Console.ReadLine().ToUpper());

и чтобы получить спасение от ошибки получения большего количества символов с помощью Console.ReadLine(), вы можете использовать

char grd = Convert.ToChar(Console.ReadKey().KeyChar.ToString().ToUpper());

Ответ 5

Преобразовать в верхний регистр перед переключением, как показано ниже,

grade = Char.ToUpper(grade);

Ответ 6

Write Переключить на класс .ToUpper(), как это, и не изменять значение его значения, возможно, вам понадобится его после

    char grade = Convert.ToChar(Console.ReadLine());

    switch (grade.ToUpper())
    {
        case 'A':
            Console.WriteLine("Excellent Work!");
            break;
        case 'B':
            Console.WriteLine("Very Good Effort! Just a couple of     Errors =)");
            break;
        case 'C':
            Console.WriteLine("You Passed. Push Yourself Next Time");
            break;
        case 'D':
            Console.WriteLine("Better put in more effort next time. I know you can do better");
            break;
        default:
            Console.WriteLine("Invalid Grade.");
            break;
    }

Ответ 7

Вы можете упасть из одного случая в другой, как это

public static void Main(string[] args)
{
    Boolean validInputRead = false;
    Char grade;

    while(!validInputRead) 
    {
        validInputRead = true;

        Console.WriteLine("Please Input the Grade");
        grade = Convert.ToChar(Console.Read());

        switch (grade)
        {
            case 'A':
            case 'a':
                Console.WriteLine("Excellent Work!");
                break;

            case 'B':
            case 'b':
                Console.WriteLine("Very Good Effort! Just a couple of     Errors =)");
                break;

            case 'C':
            case 'c':
                Console.WriteLine("You Passed. Push Yourself Next Time");
                break;

            case 'D':
            case 'd':
                Console.WriteLine("Better put in more effort next time. I know you can do better");
                break;

            default:
                Console.WriteLine("Invalid Grade.");
                validInputRead = false;
                break;
        }

        Console.ReadKey();
    }
}

ИЗМЕНИТЬ

  • Изменено от Console.ReadLine() до Console.Read() как предложено
  • Добавлен while(!validInputRead) в соответствии с запросом

Ответ 8

string letterGrade;           int grade = 0;

        // This will hold the final letter grade
        Console.Write("Input the grade :");

        switch (grade)
        {

            case 1:
                // 90-100 is an A
                letterGrade = "A";
                Console.WriteLine("grade b/n 90-100");
                break;
            case 2:
                // 80-89 is a B
                letterGrade = "B";
                Console.WriteLine("grade b/n 80-89");
                break;
            case 3:
                // 70-79 is a C
                letterGrade = "C";
                Console.WriteLine("grade b/n 70-79");
                break;
            case 4:
                // 60-69 is a D
                letterGrade = "D";
                Console.WriteLine(" grade b/n 60-69 ");
                break;
            default:
                // point whic is less than 59
                Console.WriteLine("Invalid grade");

                break;
        }