C# 为什么Convert.ToInt32(Console.Read())返回53而不是5?

C# 为什么Convert.ToInt32(Console.Read())返回53而不是5?,c#,C#,该计划: static void Main(string[] args) { int x; Console.Write("Enter number:"); x = Convert.ToInt32(Console.Read()); Console.WriteLine($"Output: {x}"); } 控制台文本: Enter number: 5 Output: 53 Press any key to continue... 截图: 输入数字5,但输出不是

该计划:

static void Main(string[] args)
{
    int x;
    Console.Write("Enter number:");
    x = Convert.ToInt32(Console.Read());
    Console.WriteLine($"Output: {x}");
}
控制台文本:

Enter number: 5
Output: 53

Press any key to continue...
截图:

输入数字5,但输出不是5
  • Console.Read()
    单个字符作为
    字符
    读取,而不是将整行作为
    字符串
    读取
  • char
    值本身实际上是整数,在大多数操作中,C#/.NET不会将其作为文本处理,这可能会让初学者望而却步
  • '5'
    的整数值(作为
    char
  • Convert.ToInt32(Char)
    Char
    值视为整数(因此
    '5'
    53
    ),并将其转换为
    Int32
    值,而不是将字符解析为十进制数字。
    • 我强烈建议避免使用
      Convert
      类。在.NET框架中有更好的替代方案(例如
      Int32.TryParse
  • 要解决此问题,请使用
    Console.ReadLine()
    Int32.TryParse
    而不是
    Convert.ToInt32
    ,这样您就可以优雅地处理无效输入

    while( true )
    {
        Console.Write( "Enter number: " );
        String input = Console.ReadLine();
        if( Int32.TryParse( input, out Int32 value ) ) // ideally use the overload with NumberStyles.Any and CultureInfo.CurrentCulture to be explicit.
        {
            Console.WriteLine( $"Output: {value}" );
        }
        else
        {
            Console.WriteLine( "Please enter a valid number." ); 
        }
    }