【问题标题】:C# testing to see if a string is an integer?C# 测试字符串是否为整数?
【发布时间】:2010-12-17 16:09:13
【问题描述】:

我只是好奇是否在 C# 语言或 .NET Framework 中内置了一些东西来测试某个东西是否为整数

if (x is an int)
   // Do something

在我看来可能有,但我只是一年级的编程学生,所以我不知道。

【问题讨论】:

  • 你的代码中x的类型是什么?
  • 感谢 Holterman 的编辑,我应该澄清一下。

标签: c# .net string integer


【解决方案1】:

使用int.TryParse 方法。

string x = "42";
if(int.TryParse(x, out int value))
  // Do something

如果解析成功,则返回true,输出结果为整数。

【讨论】:

  • 他们是否也有其他变量类型的 TryParse 方法?使用这种方法是否被认为是良好的编程习惯?
  • 许多其他 .NET 原始类型(UInt64、Double、...)也有一个 TryParse 方法。如果您有一个字符串,使用TryParse 通常是将其转换为这些类型之一的最佳做法。
  • @Alex,试试你的智能感知。它可以在您键入时显示每个班级的每个成员。
  • 我仍然使用这种方法获得负值。你能告诉我应该如何忽略负值吗?@Brandon
  • @ArpitPatel 负整数仍然是有效整数。如果您想忽略它,只需进行< 0 检查。
【解决方案2】:

如果你只想检查传递变量的类型,你可能会使用:

    var a = 2;
    if (a is int)
    {
        //is integer
    }
    //or:
    if (a.GetType() == typeof(int))
    {
        //is integer
    }

【讨论】:

  • 是的,我想这真的取决于我最初将变量 x 声明为什么。
  • 这些都不适合我。当我调查它时。 GetType() 返回 int64,但 typeof(int) 返回 int32。我会假设第一个如果做同样的事情
【解决方案3】:

我想我记得看过 int.TryParse 和 int.Parse Regex 和 char.IsNumber 和 char.IsNumber 之间的性能比较是最快的。无论如何,无论性能如何,这里还有另一种方法。

        bool isNumeric = true;
        foreach (char c in "12345")
        {
            if (!Char.IsNumber(c))
            {
                isNumeric = false;
                break;
            }
        }

【讨论】:

  • 对 TryParse 的性能评论仅适用于 int.Parse、Regex 和 char.IsNumber。当 TryParse 尚不存在时,我想到的参考是在 .NET 2.0 之前出现的。
  • 这里是来自 cp 的一个不错的参考,它展示了一些不同的方法可以实现这一点。 codeproject.com/KB/cs/csharp-isnumeric.aspx
  • 此处将空字符串验证为数字,应以isNumeric = false开头...
  • 不会验证包含负值的字符串。
【解决方案4】:

我已经编写了大约 2 周的代码,并创建了一个简单的逻辑来验证整数是否已被接受。

    Console.WriteLine("How many numbers do you want to enter?"); // request a number
    string input = Console.ReadLine(); // set the input as a string variable
    int numberTotal; // declare an int variable

    if (!int.TryParse(input, out numberTotal)) // process if input was an invalid number
    {
        while (numberTotal  < 1) // numberTotal is set to 0 by default if no number is entered
        {
            Console.WriteLine(input + " is an invalid number."); // error message
            int.TryParse(Console.ReadLine(), out numberTotal); // allows the user to input another value
        }

    } // this loop will repeat until numberTotal has an int set to 1 or above

如果您愿意,也可以在 FOR 循环中使用上述内容,不将操作声明为循环的第三个参数,例如

    Console.WriteLine("How many numbers do you want to enter?");
    string input2 = Console.ReadLine();

    if (!int.TryParse(input2, out numberTotal2))
    {
        for (int numberTotal2 = 0; numberTotal2 < 1;)
        {
            Console.WriteLine(input2 + " is an invalid number.");
            int.TryParse(Console.ReadLine(), out numberTotal2);
        }

    }

如果您不想要循环,只需删除整个循环大括号

【讨论】:

    【解决方案5】:

    这个函数会告诉你你的字符串是否只包含字符 0123456789。

    private bool IsInt(string sVal)
    {
        foreach (char c in sVal)
        {
             int iN = (int)c;
             if ((iN > 57) || (iN < 48))
                return false;
        }
        return true;
    }
    

    这与 int.TryParse() 不同,它会告诉你你的字符串是否可以是一个整数。
    例如。 " 123\r\n" 将从 int.TryParse() 返回 TRUE,但从上述函数返回 FALSE。

    ...仅取决于您需要回答的问题。

    【讨论】:

      【解决方案6】:

      很简单...使用这段代码

      bool anyname = your_string_Name.All(char.IsDigit);
      

      如果你的字符串有整数,它会返回真,否则返回假...

      【讨论】:

      • 这会检查以确保字符串的所有字符都是数字,但不处理负数、带有(无操作)前导 + 的数字或周围的空格。 (结果变量的命名也令人困惑。)我很想也因为不包括例如0.01,000(/1.000 如果你在某些语言环境中),但 TryParse 也没有,所以我想它不会更糟。
      【解决方案7】:

      对于 Wil P 解决方案(见上文),您也可以使用 LINQ。

      var x = "12345";
      var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
      

      【讨论】:

      • 包含负值的字符串将无法验证。
      • 是的,你是对的,这不是一个完整的整数测试。我只是简化了 Wil P 的提议。
      • 对于那些寻找正整数(例如数字记录号)的简单测试的人来说是一个很好的解决方案。谢谢!
      【解决方案8】:
      private bool isNumber(object p_Value)
          {
              try
              {
                  if (int.Parse(p_Value.ToString()).GetType().Equals(typeof(int)))
                      return true;
                  else
                      return false;
              }
              catch (Exception ex)
              {
                  return false;
              }
          }
      

      不久前写的东西。上面有一些很好的例子,但只值我的 2 美分。

      【讨论】:

      • 这在不允许 out 参数的表达式树中可能很有用。
      【解决方案9】:

      如果您只想检查它是否是字符串,您可以将“out int”关键字直接放在方法调用中。根据 dotnetperls.com 网站,旧版本的 C# 不允许这种语法。这样做可以减少程序的行数。

      string x = "text or int";
      if (int.TryParse(x, out int output))
      {
        // Console.WriteLine(x);
        // x is an int
        // Do something
      }
      else
      {
        // x is not an int
      }
      

      如果你也想获取int值,可以这样写。

      方法一

      string x = "text or int";
      int value = 0;
      if(int.TryParse(x, out value))
      {
        // x is an int
        // Do something
      }
        else
      {
        // x is not an int
      }
      

      方法二

      string x = "text or int";
      int num = Convert.ToInt32(x);
      Console.WriteLine(num);
      

      参考:https://www.dotnetperls.com/parse

      【讨论】:

        【解决方案10】:

        也许这可以是另一种解决方案

        try
        {
            Console.Write("write your number : ");
            Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
        }
        catch (Exception x)
        {
            Console.WriteLine(x.Message);
        }
        Console.ReadLine();
        

        【讨论】:

          【解决方案11】:

          这个也可以试试:

              var ix=Convert.ToInt32(x);
              if (x==ix) //if this condition is met, then x is integer
              {
                  //your code here
              }
          

          【讨论】:

            猜你喜欢
            • 2011-01-13
            • 2014-11-05
            • 2013-08-05
            • 2018-08-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-05
            • 2010-10-28
            相关资源
            最近更新 更多