如何在C#中测试输入值= char A - Z

Mig*_*era 0 c# unicode while-loop

 while (asteriskWord != hangCharacters && score < 5)
 {               
      while ( letter != ) //This is where I want to test for A-Z a-z
      { 
          Console.WriteLine("Enter a letter please");
          letter = Convert.ToChar(Console.ReadLine());
      }
 }   
Run Code Online (Sandbox Code Playgroud)

在第一个之后,while-loop我希望能够将输入放在while循环中,如果值为=字母AZ或az,则会中断.

这样,如果用户输入错误的信息,循环将continue询问信息.

感谢您的时间和考虑.我也尝试写信!='A'&& letter!='a'......等等,但由于某种原因它没有用.

Glo*_*del 13

字符可以相互比较,就像数字一样:

while (!((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))) {
    Console.WriteLine("Enter a letter please");
    letter = Convert.ToChar(Console.ReadLine());
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 8

那么最简单的方法就是使用比较.如果你肯定想在一个单独的表达中做到这一点,Glorfindel的答案是恰当的.然而,所有这些括号和否定使我对可读性感到紧张.我将它分解为一个单独的方法:

while (!IsValidLetter(letter))
{
    ...
}

...

private static bool IsValidLetter(char letter)
{
    return (letter >= 'a' && letter <= 'z') ||
           (letter >= 'A' && letter <= 'Z');
}
Run Code Online (Sandbox Code Playgroud)

无论你发现哪个更具可读性 - 后者更容易在以后修改,当然,如果你最终需要更复杂的要求.

  • @RonBeyer:好吧`char.IsLetter`不符合要求.它包括[U + 01C5]之类的内容(http://www.fileformat.info/info/unicode/char/01c5/index.htm) (5认同)
  • @RonBeyer:`IsLetter`将为任何*unicode*字母返回`true`,其中包含的不仅仅是A-Za-z.查看[文档]中的"备注"部分(https://msdn.microsoft.com/en-us/library/yyxz6h5w%28v=vs.110%29.aspx) (3认同)