C # do while вводить строчные и прописные буквы в строке - PullRequest
0 голосов
/ 10 июня 2018

C # делать во время вопроса.

Что мне нужно, так это возможность завершать Q или q в верхнем регистре, строчными буквами в исходном коде.

Я ссылался на MSDN, но это не такпотренируйтесь, поэтому у меня есть вопрос здесь.

Спасибо.

using System;

namespace Try
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Q";
            string str2 = "q";

            if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)) { }

            string menu = "";

            do
            {
                Console.WriteLine("Select Meun:(1)Triangle (2)Rectangle " +
                                  "(Q)Quit",string.Equals
                                  (str1, str2, StringComparison.CurrentCultureIgnoreCase));

                menu = Console.ReadLine();

                Console.WriteLine(menu + "is selected");
            } while (menu != "Q");
        }
     }
}

1 Ответ

0 голосов
/ 10 июня 2018

Опция 1

while (!string.Equals(menu, "Q", StringComparison.OrdinalIgnoreCase));

Как предполагает StringComparision, при этом игнорируется регистр, и q и Q обрабатываются как одинаковые.

static void Main(string[] args)
{
    string str1 = "Q";
    string str2 = "q";

    if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)) { }

    string menu = "";

    do
    {
        Console.WriteLine("Select Meun:(1)Triangle (2)Rectangle " +
                "(Q)Quit",string.Equals
                (str1, str2, 
                StringComparison.CurrentCultureIgnoreCase));

        menu = Console.ReadLine();

        Console.WriteLine(menu + "is selected");
    } while (!string.Equals(menu, "Q", StringComparison.OrdinalIgnoreCase));
}

Вариант 2

while (menu.ToUpper() != "Q") 

Это преобразует все, что находится в меню переменных, в верхний регистр.Его легче читать и он выполняет свою работу, и я лично предпочитаю этот метод.

static void Main(string[] args)
{
    string str1 = "Q";
    string str2 = "q";

    if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)) { }

    string menu = "";

    do
    {
        Console.WriteLine("Select Meun:(1)Triangle (2)Rectangle " +
                "(Q)Quit",string.Equals
                (str1, str2, 
                StringComparison.CurrentCultureIgnoreCase));

        menu = Console.ReadLine();

        Console.WriteLine(menu + "is selected");
    } while (menu.ToUpper() != "Q");
}

Addtional Ниже приведен также пример, в котором используются операторы switch, которые удобны и удобны для чтения, если в будущем планируется много вариантов:

do
{
    Console.WriteLine("Select Menu:(1)Triangle (2)Rectangle (Q)Quit");

     menu = Console.ReadLine();
     switch (menu.ToUpper())
     {
         case "1":
            //DO SOME CODE
            break;
         case "2":
            //DO SOME CODE
            break;
         case "Q":
            return;
         }

         Console.WriteLine(menu + " is selected");
 } while (true);

Или этот метод, который не использует StringComparison или ToUpper и будет использоваться, если вы хотите разделить команды верхнего и нижнего регистра или если вы не хотите делать какие-либо дополнительные преобразования / проверки.

do
{
      Console.WriteLine("Select Menu:(1)Triangle (2)Rectangle (Q)Quit");

      menu = Console.ReadLine();
      switch (menu)
      {
          case "1":
             //DO THIS
             break;
          case "2":
             //DO THAT
             break;
          case "q":
          case "Q":
             return;
      }

      Console.WriteLine(menu + " is selected");
} while (true);
...