C# 如何在不区分大小写的情况下比较字符串?

C# 如何在不区分大小写的情况下比较字符串?,c#,string,switch-statement,do-while,case-sensitive,C#,String,Switch Statement,Do While,Case Sensitive,我正在编写一个代码,用户必须通过按“y”或“n”或写“是”或“否”来输入是否需要某个功能,而不检查大小写是否区分大小写(因此,如果用户写“是”或“是”,则需要工作) 此外,如果用户写入了任何无效的内容,则表示此选项无效,并再次要求用户选择一个选项 这里是它的一个抽象: static bool FeatureIsOn { get; set;} static void Main() { bool optionIsValid; do //Lo

我正在编写一个代码,用户必须通过按“y”或“n”或写“是”或“否”来输入是否需要某个功能,而不检查大小写是否区分大小写(因此,如果用户写“是”或“是”,则需要工作)

此外,如果用户写入了任何无效的内容,则表示此选项无效,并再次要求用户选择一个选项

这里是它的一个抽象:

    static bool FeatureIsOn { get; set;}

    static void Main()
    {
        bool optionIsValid;

        do //Loops around until the option is valid
        {
            Console.WriteLine();
            Console.Write("Enable Feature? [Y/N]: ");
            string optionString =  Console.ReadLine();

            switch(optionString)
            {
                default:
                    Console.WriteLine("Invalid option.");
                    optionIsValid = false;
                break;

                case "Yes":
                case "yes":
                case "Y":
                case "y":
                    FeatureIsOn = true;
                    optionIsValid = true;
                break;

                case "No":
                case "no":
                case "N":
                case "n":
                    FeatureIsOn = false;
                    optionIsValid = true;
                break;

            }
        } while (optionIsValid != true);
    }

对于每一种可能的写“是”的方式,都要有一个案例,这不是很有效。有更好的方法吗?

在检查之前,将要检查的字符串转换为大写或小写:

static bool FeatureIsOn { get; set;}

static void Main()
{
    bool optionIsValid;

    do //Loops around until the option is valid
    {
        Console.WriteLine();
        Console.Write("Enable Feature? [Y/N]: ");
        string optionString =  Console.ReadLine();

        // convert string to uppercase 
        optionString = optionString.ToUpper();

        switch(optionString)
        {
            case "YES":
            case "Y":
                FeatureIsOn = true;
                optionIsValid = true;
            break;

            case "NO":
            case "N":
                FeatureIsOn = false;
                optionIsValid = true;
            break;

            default:
                Console.WriteLine("Invalid option.");
                optionIsValid = false;
            break;

        }
    } while (optionIsValid != true);
}

在检查之前,将要检查的字符串转换为大写或小写:

static bool FeatureIsOn { get; set;}

static void Main()
{
    bool optionIsValid;

    do //Loops around until the option is valid
    {
        Console.WriteLine();
        Console.Write("Enable Feature? [Y/N]: ");
        string optionString =  Console.ReadLine();

        // convert string to uppercase 
        optionString = optionString.ToUpper();

        switch(optionString)
        {
            case "YES":
            case "Y":
                FeatureIsOn = true;
                optionIsValid = true;
            break;

            case "NO":
            case "N":
                FeatureIsOn = false;
                optionIsValid = true;
            break;

            default:
                Console.WriteLine("Invalid option.");
                optionIsValid = false;
            break;

        }
    } while (optionIsValid != true);
}

您可以使用类似于
String.ToUpper()
的方法,然后将输入的字符串与YES、NO、Y、N进行比较(也适用于
String.ToLower()
但我不确定它是否会更快

否则,可能一些
if/else
会给出一个更清晰的结果,但它不会改变任何速度


编辑:另一个选项是使用
Console.Read()
而不是
Console.Readline()
,因此如果用户想键入“YES”,它将只保留“Y”(它只记录一个字符),允许您将测试除以2;)

您可以使用
String.ToUpper()
之类的方法,然后将输入的字符串与YES进行比较,不,Y,N(也适用于
String.ToLower()
,但我不确定它是否会更快

否则,可能一些
if/else
会给出一个更清晰的结果,但它不会改变任何速度


编辑:另一个选项是使用
Console.Read()
而不是
Console.Readline()
,因此,如果用户想键入“YES”,它将只保留“Y”(它只记录一个字符),允许您将测试除以2;)

先进行修剪,然后进行降低,然后验证它是否包含有效选项(n,Y或no,YES)然后,为了找出实际的选择,只需使用.contains检查y。这将是我的策略

先修剪然后降低,然后验证它是否包含有效选项(n、y或否,是),然后通过使用.contains检查y来确定实际选择是什么。这将是我的策略

切换(optionString.ToLower())
并将所有大小写变为小写。plus default后面需要加上。
开关(optionString.ToLower())
并将所有大小写改为小写。加上默认值需要在后面。如果您只使用开关盒上的第一个字符,可能会更好。@如果用户编写任何以“Y”或“N”开头的乱码,如“YABCD”,则返回true如果你只使用开关盒上的第一个字符就可以更好地改变这个特性。@史提夫,如果用户用“y”或“n”开头写“yabCD”,如果用户在中间写“y”或“n”的任意重写,那么这个特性会返回true,不是吗?如果你仔细阅读,你会发现我建议首先验证输入,然后确定意图。在那个阶段,如果用户在中间写“y”或“n”的任何一个杂文,只有一个Yes或Y可能是真的,不是吗?不,如果你仔细阅读,你会看到我建议先验证输入然后确定意图。在那个阶段,只有yes或y可能匹配最初我比较了字符串的第一个字符,比如
if(optionString[0]==y)
,但我认为如果用户写了(yno),那么会返回true,所以现在我像
if(optionString==yes | optionString==y)一样进行匹配
起初,我比较了字符串的第一个字符,如
if(optionString[0]==Y)
但我认为如果用户写入(yno),则返回true,因此现在我像
if(optionString==YES | | optionString==Y)