我可以知道为什么我们需要在第一个例子中使用int.Parse
而不是第二个例子吗?
1的例子:
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);
}
}
}
2的例子:
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);
}
}
}
在第一个示例中,您将接收一个字符串作为控制台输入。因为没有从int
到string
的隐式转换,您必须显式解析字符串到int
才能将其分配给integer
类型的变量。
在第二个示例中,您不需要显式解析任何内容,因为c#在内部调用int
的ToString()
方法。内部也有一个转换发生但是你不需要显式地做。这和调用
Console.Write(age.ToString());
就像评论中说的@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}");
}
在第一部分中,您必须将来自命令行的输入(字符串)转换为INTEGER。在第二个示例中,您已经声明了一个整数,因此不需要解析它。
虽然Kektuto的答案是正确的,但我认为在第一个代码片段中对int.Parse
的调用也是多余的。您可以使用它将输入的字符串转换为int
,然后在连接字符串时将其转换回字符串。如果您实际对输入的年龄进行了一些计算,则确实需要进行解析。