在控制台应用程序中将字符串解析为Int32。
在控制台应用程序中将字符串解析为Int32。
我大约两周前开始学习编程,我的朋友说如果我需要帮助,可以向你们求助。\n
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int x; string s; do { Console.WriteLine("请输入一个在0-100范围内的数字"); s = Console.ReadLine(); x = Convert.ToInt32(s); } while (x < 0 || x > 100); Console.WriteLine("好的,你已经选择了"); Console.ReadKey(); } } }
\n这是我第一次遇到x=s.ToInt32
(我读到int
应该包含一个数字而不是string
或字母..)和错误信息:\n
'string' does not contain a definition for 'ToInt32' and no extension method 'ToInt32' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?) C:\Users\user\Documents\Visual Studio11\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 19 23 ConsoleApplication1
在控制台应用程序中将字符串解析为Int32的问题是因为字符串类没有ToInt32方法,编译器正确地拒绝使用这个方法。正确的方法是使用Int32.TryParse来确保输入实际上是一个数字。
Int32.TryParse将尝试将传入的字符串转换为整数。如果成功,你就可以在作为out参数传递的x变量中得到你的数字,同时该方法返回true。相比于Int32.Parse或Convert.ToInt32,这个方法更可取,因为如果输入字符串不是一个数字,它不会抛出异常,而异常对于任何应用程序的性能来说都是非常昂贵的。
下面是一个示例代码,展示了如何使用Int32.TryParse来解决这个问题:
int x; string s; do { Console.WriteLine("input a number in the range of 0 -100"); s = Console.ReadLine(); if(!Int32.TryParse(s, out x)) x = -1; // 不是一个整数,强制进入下一次循环 } while (x < 0 || x > 100);
在这个示例中,程序要求用户输入一个在0到100范围内的数字,然后使用Int32.TryParse将用户输入的字符串转换为整数。如果转换成功,x变量将得到用户输入的数字。如果转换失败,x将被设置为-1,然后进入下一次循环,直到用户输入一个有效的数字为止。
通过使用Int32.TryParse,我们可以避免因为输入字符串不是一个数字而引发异常,从而提高应用程序的性能。
问题的出现原因是:在控制台应用程序中将字符串解析为Int32时可能会出现错误。
解决方法是:尝试使用Convert.ToInt32()或Int32.TryParse()方法。这两种方法都接受一个字符串并将其转换为Int32实例。Convert.ToInt32()方法接受一个字符串并返回相应的整数值(如果转换成功);Int32.TryParse()方法接受一个字符串和一个输出变量,并返回一个布尔值,指示转换是否成功。
另外,我们通常乐意在这里提供帮助,但同时也希望你先自己尝试并清楚地陈述你的问题。尽量提供一个能够说明你遇到问题的最小工作示例(MWE)。如果你只提供了大量代码而只有几行代码能够说明你遇到的问题,这通常会被看作是不好的做法。尽管这可能并不容易,特别是当你还在学习时,但通过这样做,你很可能会自己发现解决方案,这将帮助你学习得更好,而不是让别人直接给出答案。
在控制台应用程序中,将字符串转换为Int32的问题的出现原因是在字符串类中没有名为ToInt32()的方法。解决方法是使用int.TryParse或Convert.ToInt32来进行转换。int.TryParse还提供了一个布尔值,显示转换是否成功。你也可以使用扩展方法来创建不存在的ToInt32()方法。所有这些方法都可以满足你的需求。
下面是一个示例扩展方法的代码:
public static int ToInt32(this string s) { return Convert.ToInt32(s); }
你可以参考NetStarter的答案中提供的链接了解这些方法之间的区别。此外,还有两个教程可以供你参考:
- MSDN: http://msdn.microsoft.com/en-us/library/vstudio/bb397679.aspx
- DotNetPerls: http://www.dotnetperls.com/convert-string-int
祝你好运,并欢迎加入Stack Overflow!