Convert类和转换控制台输入C#

这个问题更像是“为什么我不能这样做/我做错了什么”因为我已经设法完成了程序应该做的事情,但它提出了更多关于为什么某些事情按照他们的方式工作的问题。

对于初学者来说,这个项目的目标是从Console窗口捕获一个字符(使用Console.Read()/。ReadLine()),将其转换为Convert类的字符串,然后将其写入Console窗口。

我已经设法通过以下代码使我的项目具有此function:

namespace ReadConvertWrite { class Program { static void Main(string[] args) { String input = Console.ReadLine(); try { Convert.ToInt32(input); } catch (Exception) { } Console.WriteLine(input); Console.ReadLine(); } } } 

鉴于这似乎是一个毫无意义的练习,因为转换是不必要的,我想通过使用.Read()方法而不是.ReadLine()来实现它。 这引出了我的问题:

为什么.Read()始终打印输入到控制台中的字符的hex值,尽管MSDN文档使其听起来像.Read()和.ReadLine()以相同的方式工作,除了读取单个字符和一行,除此之外为什么没有我尝试过的Convert类方法(.ToInt,.ToString等)实际上给我的输出不是hex值?

这是我到目前为止所尝试的内容:

 namespace ReadConvertWrite { class Program { static void Main(string[] args) { Console.WriteLine(Convert.ToString(Console.Read())); Console.ReadLine(); Console.ReadLine(); } } } 

和:

 namespace ReadConvertWrite { class Program { static void Main(string[] args) { var input = 0; input = Console.Read(); String InputString = Convert.ToString(input); Console.ReadLine(); Console.ReadLine(); } } } 

Console.Read返回表示字符的整数。 Console.ReadLine返回一个字符串。

当您执行Console.WriteLine(Console.ReadLine()) ,您只需回显输入。 当您执行Console.WriteLine(Convert.ToString(Console.Read())) ,您将获取该字符的数值并将其作为数字打印。

Convert.ToString(int)不会将整数解释为一个字符 – 这将是相当荒谬的。 你期望Convert.ToString(42)打印*吗? 您需要将整数转换为字符:

 Console.WriteLine((char)Console.Read()); 

最有可能的是,你不想使用Console.Read – 这是处理老式CLI的一个相当具体的事情,而不是对典型的控制台程序非常有用的东西,除非你需要流式传输很多字符并且想要避免不必要地分配巨大的字符串。

确保正确处理文件结尾 – 当输入流结束时, Console.Read()将返回-1 ,这不是char的有效值。

如果将鼠标hover在Read()上,它将显示它返回int而不是字符串。 将’int’转换为字符串只是int的字符串表示forms。 要从int获取角色,请将其强制转换为char。

对char的强制转换会将数字转换回其字符表示forms。

 Console.WriteLine((char)Console.Read());