C# тестирование, чтобы увидеть, является ли строка целым числом?


Я просто любопытствую, есть ли что-то встроенное в язык c# или .net framework, которое проверяет, является ли что-то целым числом

if (x is an int)
   // Do something

Мне кажется, что может быть, но я только студент первого курса программирования, поэтому я не знаю.

10 53

10 ответов:

использовать int.TryParse метод.

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

если он успешно анализирует, он вернет true, и результат out будет иметь свое значение в виде целого числа.

Я думаю, что я помню, глядя на сравнение производительности между int.TryParse и int.Разбор регулярных выражений и символов.IsNumber и char.IsNumber был самым быстрым. В любом случае, независимо от производительности, вот еще один способ сделать это.

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

для решения Wil P (см. выше) вы также можете использовать LINQ.

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

Если вы просто хотите проверить тип переменной, вы могли, вероятно, использовать:

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

эта функция сообщит вам, если ваша строка содержит только символы 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" вернет TRUE из int.TryParse () но FALSE из приведенной выше функции.

...Просто зависит от вопроса, на который вам нужно ответить.

его простой... используйте этот кусок кода

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

он вернет true, если ваша строка имеет целое число, другое мудрое false...

Если вы только хочу проверить, является ли это строка или нет, вы можете разместить ключевые слова "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);

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

Я кодировал около 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);
        }

    }

Если вы не хотите цикл, просто удалите всю скобку цикла

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 цента стоит.

есть простой метод в c#7

// if input 10    
var input = int.TryParse(Console.ReadLine(), out var output);
// input = true, output = 10

// or if input will be "abcd", you will get:
// input = false, output = 0

на входе у вас будет false или true, а на выходе у вас будет преобразованный номер, если его можно преобразовать.