-2

我大约 2 周前开始编程,我的朋友说如果我需要任何帮助,我可以向你们寻求帮助。

    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("input a number in the range of 0 -100");
                    s = Console.ReadLine();
                    x = s.ToInt32();
                }
                while (x < 0 || x > 100);
                Console.WriteLine("ok you have chosen");
                Console.ReadKey();
                }
        }
    }

我第一次遇到这种情况x=s.ToInt32(我读过它int应该包含一个数字而不是一个string或字母..)和错误:

'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
4

4 回答 4

5

您可以使用int.TryParse将字符串转换为 int

s = Console.ReadLine();
int.TryParse(s, out x);

或者Convert.ToInt32

x = Convert.ToInt32(s)

你得到你得到的错误的原因,这意味着类中没有调用ToInt32()方法string

TryParse()还给出一个布尔值,显示转换是否成功(即,变量是字符串,也就是数字)。

但是,您可以使用扩展方法创建不存在的方法。this 关键字意味着它引用了正在调用它的对象。

public static int ToInt32(this string s)
{
       return Convert.ToInt32(s);
}

所有这些都可以满足您的需要,NetStarter 的回答确实提供了差异的链接,我觉得这很有趣。还有这两个教程:

祝你好运,欢迎来到 Stack Overflow!

于 2013-06-01T13:10:02.100 回答
3

尝试使用Convert.ToInt32()Int32.TryParse()。要么接受字符串并将其转换为 Int32 实例。Convert.ToInt32接受一个字符串(在它的许多重载中),如果可以进行转换,则返回相应的整数值;Int32.TryParse()接受一个字符串和一个输出变量(@Cyral 的答案out x)并返回一个布尔值,指示转换是否成功。

另外,是的,我们通常很乐意在这里提供帮助,但您也应该先自己尝试并清楚地说明您的问题。始终尝试提供一个 MWE(最小工作示例)来说明您遇到的问题。当几行代码几乎可以说明您遇到的问题时,发布几乎是一堵代码,这通常是不受欢迎的。这可能并不总是那么容易,特别是如果您仍在学习,但这样做您很可能会自己发现解决方案,这几乎肯定会比用勺子喂食答案帮助您更好地学习。

于 2013-06-01T13:09:21.930 回答
2

是的,字符串类没有 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; // Not a integer, force another loop
}
while (x < 0 || x > 100);
...

Int32.TryParse将尝试将传入的字符串转换为整数。如果成功,您将在 x 变量中的号码作为输出参数传递,而该方法返回 true。此方法比Int32.ParseConvert.ToInt32更可取,因为如果输入字符串不是数字,它不会引发异常,并且异常对于任何应用程序的性能来说都是非常昂贵的。

于 2013-06-01T13:11:12.590 回答
1

Use int.TryParse

string text2 = "10000";
int num2;
if (int.TryParse(text2, out num2))
{
    // It was assigned.
}

//
// Display both results.
//
Console.WriteLine(num1);
Console.WriteLine(num2);

Or Convert.ToInt32

result = Convert.ToInt32("String");

What is the difference in both ?

Read it here -> What's the difference between Convert.ToInt32 and Int32.Parse?

于 2013-06-01T13:18:38.317 回答