为什么在C#Console.ReadLine()中只存储字符串?

为什么在C#Console.ReadLine()中只存储字符串?,c#,console.readline,C#,Console.readline,为什么Console.ReadLine()不能在C#中存储int/double?与C++中的“CIN >”相反,它可以根据变量存储任何东西。p> 控制台本身就是文本输入Console.ReadLine()(以及其他方法)不为您进行解析,而是让您自己进行解析 然而,这有一个优点,因为它可以更容易地干净地处理错误案例(例如,如果您希望以双精度读取,并且用户键入“foo”)不同的语言、不同的库、不同的API、不同的设计决策等 cin.operator>被传递一个引用以用于out参数,并且它在该参数类型

为什么Console.ReadLine()不能在C#中存储int/double?与C++中的“CIN >”相反,它可以根据变量存储任何东西。p> 控制台本身就是文本输入
Console.ReadLine()
(以及其他方法)不为您进行解析,而是让您自己进行解析


然而,这有一个优点,因为它可以更容易地干净地处理错误案例(例如,如果您希望以双精度读取,并且用户键入“foo”)

不同的语言、不同的库、不同的API、不同的设计决策等

cin.operator>
被传递一个引用以用于out参数,并且它在该参数类型上重载<代码>控制台。ReadLine返回一个值且未重载


您可以为
控制台
编写自己的扩展方法,比如说,
GetValue
,它是一个传递出去的参数,可以在任意多的类型上重载。

因为读取字符串更安全。它避免了C++中的错误数据,因为流的状态错误。

,控制台。RealLoad()确实存储字符串,因为这是它的构建方式。 但是,您可以检查您的输入,并根据您想要的类型进行转换

例如,您可以这样做:

string sen = Console.ReadLine();
int b;
int.TryParse(sen, out b);
Console.WriteLine(b);
您可以使用上面的代码获取输入,然后将结果作为int输入到b中。 例如,如果输入不是数字,则b将存储0


如果要将其转换为double,则应执行double.TryParse并将其置于双变量上。

Console.Readline()
只读取字符串值。控制台不知道要输入什么类型的值。C++也不允许这样做,但是它允许你在不同类型的时候射击你自己。在C++中,当你尝试把输入“hello World”作为int来读取时会发生什么?为什么问题很难,只有BCL团队能够肯定地回答。但控制台输入的使用要比引入C/C++时少得多。只是不值得这么努力。读一行并处理它。@David:与C#中的
int.Parse(“Hello”)
大致相同。@HenkHolterman:正是:)功能没有什么不同,C#只是更明确一点而已。