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);
}
}
答案 0 :(得分:6)
答案 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()
FormatException :值不包含可选符号后跟一系列数字(0到9)。
答案 3 :(得分:3)
我强烈怀疑您正在使用Console.ReadLine
和Console.Read
方法。
从标准输入流中读取下一个字符。
和
返回值类型:System.Int32 来自输入的下一个字符 流,如果当前没有更多字符,则为负一(-1) 待读。
这意味着当您使用此方法放置abc
时,它会返回97
(because 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测试它,它仍然给我一个错误。