前:
解析:int inumber = int.Parse(Console.ReadLine());
(数据类型):int inumber = (int)(Console.Read());
请给我解释(给Ex更好:D) 谢谢! :)
答案 0 :(得分:3)
好吧,Console.Read()
返回int
,而不是String
,因此代码中的广告多余:
https://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx
你可以放
int inumber = Console.Read(); // no need to (int) here
请注意,Console.Read()
不会返回您输入的整数值(例如123456
),但
输入流中的下一个字符,如果是,则为负一(-1) 目前没有更多字符可供阅读。
对于Console.ReadLine()
,它返回String
,如果字符串代表有效整数(比如"123"
),你可以解析它
int inumber = int.Parse(Console.ReadLine());
但是,如果输入字符串不能被视为整数(例如"bla-bla-bla"
),则会抛出异常。您可能还需要TryParse
方法:
int number;
if (int.TryParse(Console.ReadLine(), out number)) {
// ReadLine represents a valid integer which is parsed into number
}
else {
// ReadLine can't be parsed into a valid integer
}
答案 1 :(得分:1)
您在问为什么当您需要将数据从一种类型“转换”为另一种类型时,有两种不同的概念:转换和解析。这实际上是一个非常好的问题。对于像我这样的老程序员来说,答案显而易见:如果转换不是很大,那么它就是一个演员,否则你必须使用显式函数(如Parse,或atol,......)。但实际上这是完全随意的区别。
对于已经是数字的类型之间的C#数字转换,int转换为long,double转换为int,....
C#Parse对字符串的典型工作起作用,该字符串包含某些内容的文本表示形式(在您的情况下为数字)。在这种情况下,它将人类可读的东西(字符串)转换为机器可读的内部表示(int)。
为了看看这是多么不一致,c ++有static_cast<>
基本上用数字来表示数字,而lexical_cast<>
用来做Parse类型的东西
在您的代码示例中,(int)
Console.Read()`已经输入了单个字符并将其强制转换为int。如果您输入'1',您将获得49.看看您是否可以找出原因 - 请查看http://www.asciitable.com/