当ToInt32()方法具有无效的参数类型

时间:2015-08-05 11:02:20

标签: c# .net console

1)

class Program
{
    static void Main(string[] args)
    {
        int a;
        a = Convert.ToInt32( "a" );
        Console.Write(a);
    }
}

我收到FormatException消息:Input string was not in a correct format。这是非常明白的。

2)

class Program
{
    static void Main(string[] args)
    {
        int a;
        a = Convert.ToInt32( Console.Read() );
        Console.Write(a);
    }
}

在第二种情况下,我可以输入任何字符,例如abc,并在控制台中显示。

问题:为什么不在第二种情况下抛出FormatException以及为什么它与非int字符一起成功运行?

更新

使用Console.ReadLine()方法,返回string类型,也不会转发FormatException并在控制台中成功打印任何字符。

class Program
{
    static void Main(string[] args)
    {
        int a;
        a = Convert.ToInt32(Console.ReadLine());
        Console.Write(a);
    }
}

5 个答案:

答案 0 :(得分:6)

return type of Console.Read() is an int

然后拨打Convert.ToInt32(int)

  

返回指定的32位有符号整数;没有进行实际转换。

答案 1 :(得分:5)

因为Console.Read()的输出是 int 。这意味着它获得了你输入内容的 int 表示,所以如果你输入字符,它实际上得到了那个字符的int表示,一切都很好。

详细了解发生了什么:

int a;
a = Convert.ToInt32(Console.Read());  //input for example: abc
Console.WriteLine(a);                 //97
Console.WriteLine((char)a);           //a

答案 2 :(得分:4)

  

返回值类型:System.Int32输入中的下一个字符   流,如果当前没有更多字符,则为负一(-1)   待读。

public static int Read()

Reference

FormatException :值不包含可选符号后跟一系列数字(0到9)。

答案 3 :(得分:3)

强烈怀疑您正在使用Console.ReadLineConsole.Read方法。

来自Console.Read doc;

  

从标准输入流中读取下一个字符。

  

返回值类型:System.Int32 来自输入的下一个字符   流,如果当前没有更多字符,则为负一(-1)   待读。

这意味着当您使用此方法放置abc时,它会返回97because 97 is the ascii value of the first character)这是一个有效的整数。

答案 4 :(得分:3)

https://msdn.microsoft.com/en-us/library/sf1aw27b(v=vs.110).aspx

ToInt32确实有一个可以接受字符串的重载版本,但字符串必须是实数的表示; ""不是一个数字,但如果你有" 101"它会正确解析 -

int a;
a = Convert.ToInt32("101");  //will parse to int
Console.Write(a);

a = Convert.ToInt32("a");  //will not parse to int
Console.Write(a);

你的第二个例子在第一个例子不起作用的原因是因为Console.Read根据传入其中的下一个字符返回整数值,所以一切都很好用它调用ToInt32。

UPDATE -

刚刚使用ReadLine测试它,它仍然给我一个错误。

enter image description here