【问题标题】:When to use int.Parse?何时使用 int.Parse?
【发布时间】:2021-12-10 17:39:09
【问题描述】:

我可以知道为什么我们需要在第一个示例中使用int.Parse 而不是第二个示例吗?

第一个例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Test
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string name = Console.ReadLine();
            int age= int.Parse(Console.ReadLine());
            Console.WriteLine("Name:"+ name);
            Console.WriteLine("Age:"+ age);
        }
    }
}

第二个例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Test
{
    public class Program
    {
        public static void Main(string[] args)
        {
             int age = 20;
             Console.Write(age);
        }
    }
}

【问题讨论】:

  • 在第一个例子中,Console.ReadLine() 是一个字符串。在第二个例子中,20 已经是一个 int,所以你不需要解析它。如果它是"20" 而不是20,则需要解析它
  • 注意:一般来说,在处理用户输入时,您应该更喜欢TryParse 而不是Parse - 因为用户经常给出无法被合理解析为整数的输入.
  • 如果你只是写到控制台,你也不需要使用int.Parse
  • 此外,如果您有这样的代码行:int age="20"; 这将导致编译错误,因为您无法将 string 分配给 int。所以要修复它你需要做int age = int.Parse("20");
  • @JohnathanBarclay A,谢谢。这就是我真正的意思。总是混淆两者。

标签: c# integer


【解决方案1】:

在第一个示例中,您接收到一个字符串作为控制台输入。因为没有从intstring 的隐式转换,所以您必须将字符串显式解析为int 才能将其分配给integer 类型的变量。
在第二个示例中,您不需要显式解析任何内容,因为 C# 在内部调用 intToString() 方法。所以在内部也会发生转换,但您不必明确地进行。和调用是一样的

Console.Write(age.ToString());

就像 cmets 中所说的 @Damien_The_Unbeliever。在解析控制台输入时,您希望使用int.TryParse() 以避免在接收非整数值作为输入时出现任何异常。这看起来像这样:

if(!int.TryParse(Console.ReadLine(), out int age))
{
   Console.WriteLine("Wrong input format");
}
else
{
   // Do something with age (of type int)
   Console.WriteLine($"Age: {age}");
}

【讨论】:

  • 注意,第一个例子写"Age:"+age的时候,内部也调用了.ToString()
【解决方案2】:

在第一部分中,您必须将来自命令行的输入(字符串)转换为 INTEGER。在第二个中,您已经声明了一个整数,因此无需解析它。

【讨论】:

    【解决方案3】:

    虽然Kektuto's answer 是正确的,但我想说对int.Parse 的调用在第一个代码sn-p 中也是多余的。您使用它将输入的字符串转换为int,然后在连接时将其转换回字符串。如果您真的对输入的年龄进行了一些计算,那么确实需要进行解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多