为什么Console.ReadLine()不能在C#中存储int / double?与“cin>>”相反在C ++中,可以根据变量存储任何内容。
答案 0 :(得分:7)
不同的语言,不同的库,不同的API,不同的设计决策等。
cin.operator>>
传递一个引用以使用out参数,并且它在此参数类型上重载。 Console.ReadLine
返回一个值,但不会超载。
您可以为Console
编写自己的扩展方法,例如GetValue
,它会传递一个out参数,并根据您的需要重载多种类型。
答案 1 :(得分:2)
本机控制台只是文本输入。 Console.ReadLine()
(以及其他方法)不会为您解析,而是让您自己解析。
这样做有一个优点,因为它可以更容易地干净地处理错误情况(例如,如果你想读取一个double,用户输入" foo")。 / p>
答案 2 :(得分:0)
因为读取字符串更安全。它可以防止诸如C ++中的错误数据之类的错误,因此流的状态就是错误的。
答案 3 :(得分:0)
Console.ReadLine() 确实存储字符串,因为它是这样构建的。 但是,您可以检查您的输入并转换为您想要的类型。
例如,你可以这样做:
string sen = Console.ReadLine();
int b;
int.TryParse(sen, out b);
Console.WriteLine(b);
您可以使用上面的代码获取输入,然后将结果作为 int 放入 b。 例如,如果输入不是数字,则 b 将存储 0。
如果你想让它加倍,那么你应该做 double.TryParse 并将它放在一个 double 变量上。