C#。 " Parse"之间有什么不同?和" (_Data Type _)"?

时间:2016-05-24 16:13:48

标签: c# parsing types

前:

解析:int inumber = int.Parse(Console.ReadLine());

数据类型):int inumber = (int)(Console.Read());

请给我解释(给Ex更好:D) 谢谢! :)

2 个答案:

答案 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/