关于C#中int.TryParse方法的疑问:out关键字后应填写什么?
解决int.TryParse中out参数的使用问题
嘿,我来帮你搞定这个int.TryParse的问题!先看看你现有代码里的两个小问题:
- 你先用了
Convert.ToInt32(Console.ReadLine()),这步完全没必要——如果用户输入的不是整数,这行代码直接就会抛出异常,而你用TryParse的目的就是避免这种情况,所以应该直接把用户输入的字符串传给TryParse。 out关键字后面必须跟上一个int类型的变量,这个变量用来接收解析后的结果(不管成功失败都会被赋值)。
关于out参数的核心规则
out是用来让方法把处理结果“输出”给调用者的关键字,所以你需要提供一个int类型的变量(可以在out后直接声明,也可以提前声明好)。- 这个变量不需要提前赋值,TryParse会在方法内部自动处理:
- 解析成功时:变量被赋值为转换后的整数,方法返回
true。 - 解析失败时:变量被赋值为int的默认值
0,方法返回false。
- 解析成功时:变量被赋值为转换后的整数,方法返回
修正后的完整代码
Console.WriteLine("write a number into the console"); string userInput = Console.ReadLine(); // 先获取用户输入的原始字符串 if (!int.TryParse(userInput, out int parsedNumber)) { // 解析失败的分支 Console.WriteLine("Not an integer"); } else { // 解析成功,parsedNumber就是转换后的整数 Console.WriteLine($"this is an integer: {parsedNumber}"); }
如果你习惯提前声明变量,也可以这么写:
Console.WriteLine("write a number into the console"); string userInput = Console.ReadLine(); int parsedNumber; // 提前声明变量,无需初始化 if (!int.TryParse(userInput, out parsedNumber)) { Console.WriteLine("Not an integer"); } else { Console.WriteLine($"this is an integer: {parsedNumber}"); }
额外提醒
你原来的代码里把thisnumber(已经是int类型)传给TryParse是错误的——TryParse的第一个参数要求是字符串类型,它的核心作用就是把字符串转换成整数,所以直接传用户输入的原始字符串就对啦。
内容的提问来源于stack exchange,提问作者katic44
相关产品推荐
相关产品推荐

