循环中的Y/N或y/n

Dwa*_*dar 3 .net c# if-statement string-comparison toupper

嗨伙计们在循环中实现Y/N或y/n时遇到一些麻烦.我的设计方式是用户可以在循环中使用Y和N的大小写字母作为答案.顺便说一句这里是我的代码,但似乎无法使其工作:

do
        {
            Console.WriteLine("\nSelect additional topping/s\n");

            Console.WriteLine("1 - Extra meat: 200");
            Console.WriteLine("2 - Extra cheese: 100");
            Console.WriteLine("3 - Extra veggies: 80\n");

            int selectedTopping = Convert.ToInt32(Console.ReadLine());

            switch (selectedTopping)
            {
                case 1:
                    pizza = new MeatToppings(pizza);
                    break;

                case 2:
                    pizza = new CheeseToppings(pizza);
                    break;

                case 3:
                    pizza = new VeggieToppings(pizza);
                    break;

                default:
                    break;
            }

            Console.WriteLine("\nAdd more toppings? Y/N");


        }

        while ((Console.ReadLine() == "Y") || (Console.ReadLine() == "y"));
Run Code Online (Sandbox Code Playgroud)

Aus*_*ley 6

while ((Console.ReadLine() == "Y") || (Console.ReadLine() == "y"));
Run Code Online (Sandbox Code Playgroud)

由于你打ReadLine()两次电话,这将会读取2个不同的行.您需要调用一次并保存该值.


Til*_*lak 6

您可以使用 ToUpper

while ((Console.ReadLine().ToUpper() == "Y") );
Run Code Online (Sandbox Code Playgroud)

  • 不建议使用ToUpper/ToLower进行字符串比较.[土耳其语问题和你应该关心的原因](http://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx) (5认同)
  • 一般是的,但它不适用于这个问题.'Y'没有问题.这个问题伴随着字符`i`.此外,其中一个工具(FxCop或StyleCop)抱怨使用`ToLowerInvariant`来支持'ToUpperInvariant' (2认同)

Ria*_*Ria 6

尝试使用String.Equals和StringComparison:

String.Equals(Console.ReadLine(), "y", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

CurrentCultureIgnoreCase:使用区分文化的排序规则,当前文化以及忽略要比较的字符串的大小写来比较字符串.

OrdinalIgnoreCase:使用序数排序规则比较字符串并忽略要比较的字符串的大小写.


Hab*_*bib 5

要检查Y或y忽略大小写,您应该使用string.Equals(string,StringComparison)重载.

while (Console.ReadLine().Equals("Y", StringComparison.InvariantCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

请参阅在土耳其İ问题和为什么要照顾使用前ToUpper或ToLower与忽略大小写字符串比较.

您当前的代码正在从控制台读取两行,这就是您的代码为第二个值保留的原因.

  • @dreamlax,我知道性能瓶颈可以忽略不计.它是关于最佳实践的.请参阅[在.NET Framework中使用字符串的最佳实践](http://msdn.microsoft.com/en-us/library/dd465121.aspx) (2认同)