C#测试以查看字符串是否为整数?


70

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

if (x is an int)
   // Do something

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


3
x您的代码类型是什么?
帕维尔米纳夫

感谢Holterman的编辑,我应该澄清一下。
亚历克斯

Answers:


159

使用int.TryParse方法。

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

如果解析成功,它将返回true,输出结果的值将为整数。


1
它们是否还有其他变量类型的TryParse方法?使用这种方法是否被认为是良好的编程习惯?
亚历克斯

3
许多其他.NET基本类型(UInt64,Double等)也有一种TryParse方法。如果您有字符串,TryParse通常最好使用using将其转换为这些类型之一。
dtb

@Alex,尝试一下您的智慧。它可以显示您键入的每个班级的每个成员。
snarf

使用此方法,我仍然会得到负值。你能告诉我我应该如何忽略负值吗?
@Brandon

@ArpitPatel负整数仍然是有效整数。如果您想忽略它,只需< 0检查一下即可。
布兰登

16

我想我记得在看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。我想到的参考是在.NET 2.0之前出现的,当时TryParse还不存在。
Wil P

1
这是cp的一个不错的参考,它显示了完成此操作的一些不同方法。codeproject.com/KB/cs/csharp-isnumeric.aspx
Wil P

5
一个空字符串在此处被验证为数字,您应该以isNumeric = false...开头
Chtiwi Malek 2013年

1
包含负值的字符串将不被验证。
鲍勃·考夫曼

14

如果只想检查传递变量的类型,则可以使用:

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

1
是的,我想这真的取决于我最初将变量x声明为什么。
亚历克斯

这些都不适合我。当我看着它。GetType()返回int64,但是typeof(int)返回int32。我将假设第一个是否做同样的事情
Dan Hastings

14

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

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

6
包含负值的字符串将无效。
鲍勃·考夫曼

是的,您是对的,这不是完整的整数测试。我只是简化了Wil P.的提议
Georg

2
对于那些希望对正整数(例如数字记录号)进行简单测试的用户而言,这是一个很好的解决方案。谢谢!
Phil Nicholas

4

如果你 只想检查它是否为字符串,则可以将“ 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值,则可以这样编写。

方法1

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
}

方法2

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

推荐人:https ://www.dotnetperls.com/parse


3

简单...使用这段代码

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

如果您的字符串具有整数,否则返回true,否则为false。


2
这可以确保字符串的所有字符都是数字,但不能处理负数,带(无操作+符)前导的数字或周围的空格。(结果变量的名称也容易混淆。)我很想也为它不包含eg0.01,000(/(1.000如果您在特定的语言环境中),则对其进行叮,但TryParse也不包含,所以我认为它并不更糟。
内森·塔吉

2

此函数将告诉您字符串是否仅包含字符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。

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


1
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美分。


1
这在不允许使用out参数的表达式树内部可能很有用。
Totalys

1

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

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

0

我已经进行了大约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);
        }

    }

如果您不想循环,只需删除整个循环支架

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.