繁体   English   中英

Switch语句中的C#案例敏感性

[英]C# Case Sensitivity in 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”而返回默认响应。

我可以使用某种类型的比较吗? 如果是这样我会把它放在哪里?

您可以使用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 Enumeration即可。

你可以使用ToUpper(); 喜欢

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

并且可以使用Console.ReadLine()获取更多字符的错误

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

你也可以使用如下

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

https://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx

更改

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

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

https://msdn.microsoft.com/en-us/library/system.string.toupper(v=vs.110).aspx

在切换之前转换为大写,如下所示,

grade = Char.ToUpper(grade);

像这样切换grade.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;
    }

你可能会像这样从一个案件跌落到另一个案件

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)

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;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM