93

I'm just curious as to whether there is something built into either the C# language or the .NET Framework that tests to see if something is an integer

if (x is an int)
   // Do something

It seems to me that there might be, but I am only a first-year programming student, so I don't know.

2
  • 3
    What is the type of x in your code? Commented Nov 17, 2009 at 23:08
  • thanks for the edit Holterman, I should have clarified. Commented Nov 18, 2009 at 0:03

10 Answers 10

194

Use the int.TryParse method.

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

If it successfully parses it will return true, and the out result will have its value as an integer.

Sign up to request clarification or add additional context in comments.

6 Comments

Do they have a TryParse method for other variable types as well? And is it considered good programming practice to use this method?
Many other .NET primitive types (UInt64, Double, ...) have a TryParse method as well. If you have a string, using TryParse is usually the best practice to convert it to one of these types.
@Alex, try out your intellisense. It can show you every member of every class as you type.
I am still getting negative value using this method. Can you tell how should i ignore negative value??@Brandon
@ArpitPatel A negative integer is still a valid integer. If you want to ignore it just do a < 0 check.
|
21

If you just want to check type of passed variable, you could probably use:

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

2 Comments

Yeah, I guess it really depends on what I initially declare the variable x as.
neither of these worked for me. When i looked into it. GetType() was returning int64 but typeof(int) is returning int32. im going to assume the first if does the same thing
19

I think that I remember looking at a performance comparison between int.TryParse and int.Parse Regex and char.IsNumber and char.IsNumber was fastest. At any rate, whatever the performance, here's one more way to do it.

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

4 Comments

Scratch the performance comment on TryParse it only applies to int.Parse, Regex and char.IsNumber. The reference I was thinking of came prior to .NET 2.0 when TryParse did not exist yet.
Here is a decent reference from cp that shows some different ways you can accomplish this. codeproject.com/KB/cs/csharp-isnumeric.aspx
an empty string is validated as a number here, you should start with isNumeric = false ...
A string containing a negative value will not be validated.
19

For Wil P solution (see above) you can also use LINQ.

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

3 Comments

A string containing a negative value will not validate.
Yes, you're right, this is not a complete integer test. I merely simplified the proposal by Wil P.
Good solution for those looking for a simple test of a positive integer, such as a numeric record number. Thanks!
6

If you only want to check whether it's a string or not, you can place the "out int" keywords directly inside a method call. According to dotnetperls.com website, older versions of C# do not allow this syntax. By doing this, you can reduce the line count of the program.

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
}

If you also want to get the int values, you can write like this.

Method 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
}

Method 2

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

Referece: https://www.dotnetperls.com/parse

Comments

5

its simple... use this piece of code

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

it will return true if your string have integer other wise false...

1 Comment

This checks to be sure that all the characters of the string are digits, but doesn't handle negative numbers, numbers with a (no-op) leading +, or surrounding whitespace. (The result variable is also confusingly named.) I'm tempted to also ding it for not including e.g. 0.0 or 1,000(/1.000 if you're in certain locales), but TryParse doesn't either, so I guess it's no worse.
4

This function will tell you if your string contains ONLY the characters 0123456789.

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

This is different from int.TryParse() which will tell you if your string COULD BE an integer.
eg. " 123\r\n" will return TRUE from int.TryParse() but FALSE from the above function.

...Just depends on the question you need to answer.

Comments

2
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;
        }
    }

Something I wrote a while back. Some good examples above but just my 2 cents worth.

1 Comment

This might be useful inside expression trees where out parameter is not allowed.
2

Maybe this can be another solution

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

Comments

1

I've been coding for about 2 weeks and created a simple logic to validate an integer has been accepted.

    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

you could also use the above in a FOR loop if you prefer by not declaring an action as the third parameter of the loop, such as

    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);
        }

    }

if you don't want a loop, simply remove the entire loop brace

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.