【问题标题】:Parsing a string to an Int32 in a console application在控制台应用程序中将字符串解析为 Int32
【发布时间】:2013-06-01 13:05:25
【问题描述】:

我大约 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

【问题讨论】:

  • 试试 x = Convert.ToInt32(s);
  • 您需要更改问题的名称以更接近您的问题
  • 啊...好。没有人提出扩展方法。我为你们感到骄傲。
  • 很高兴我们能帮上忙 :) 勾选那个小复选标记,找出您认为提供了最佳答案的人。
  • @ShaiRoemi (请注意,您不必“接受”最高投票的答案。)同时投票(通过单击答案旁边的向上箭头)您找到的任何答案有帮助。欢迎使用 Stack Exchange。

标签: c#


【解决方案1】:

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

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

Convert.ToInt32

x = Convert.ToInt32(s)

您收到错误的原因,这意味着string 类中没有名为ToInt32() 的方法。

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

但是,您可以使用extension 方法创建不存在的方法。 this 关键字表示它引用了正在调用它的对象。

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

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

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

【讨论】:

  • (关于链接)模仿者。 ;)
  • 好吧,我确实查过它们以确保我没有遗漏任何东西:P
  • @MichaelKjörling hmmm 我们应该拥有我们在 SO...上提供的链接的版权...:p
  • 没问题,我在加入 SO 时也看到了同样的惊喜。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    是的,字符串类没有 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 更可取,因为如果输入字符串不是数字,它不会抛出异常,并且异常对性能来说非常昂贵任何应用程序。

    【讨论】:

      【解决方案4】:

      使用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);
      

      Convert.ToInt32

      result = Convert.ToInt32("String");
      

      两者有什么区别?

      在这里阅读 -> What's the difference between Convert.ToInt32 and Int32.Parse?

      【讨论】:

      • @Cyral 谢谢,我实际上已经回答了同样的问题,所以想提供一个链接,以便 OP 有一些清晰。
      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多