Есть ли функция Int.isWholeNumber () или что-то подобное? - PullRequest
3 голосов
/ 06 мая 2011

Мне нужно проверить, является ли вход int или нет.Есть ли функция, аналогичная функции String.IsNullOrEmpty (), например, функция Int.isWholeNumber ()?

Есть ли способ проверить это только внутри оператора if(), не объявляя перед?(Как вам нужно сделать с TryParse ())

РЕДАКТИРОВАТЬ
Мне нужно подтвердить код города (пять цифр)

Ответы [ 8 ]

12 голосов
/ 06 мая 2011

Я понял из ваших комментариев, что ваша настоящая проблема заключается в том, "как мне определить, содержит ли эта строка действительный шведский почтовый индекс?"Шведский почтовый индекс - это пятизначное число, не начинающееся с нуля.Если это проблема, которую вы действительно должны решить, то решите эту проблему .Вместо того, чтобы пытаться преобразовать строку в целое число, а затем проверить целое число, я просто написал бы проверки, которые говорят:

  • длина строки пять символов?Если нет, отклоните его.
  • является первым символом строки 1, 2, 3, 4, 5, 6, 7, 8 или 9?Если нет, отклоните его.
  • - второй, третий, четвертый и пятый символы строки 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9?Если нет, отклоните его.

Все просто.Если вы никогда не собираетесь заниматься математикой, не конвертируйте его в целое число.

Этот подход будет далее обобщаться на более сложные формы.Я понимаю, что шведские почтовые индексы часто пишутся в форме «SE-12 345», то есть с префиксом «SE-» и пробелом между цифрами от двух до трех.Будет очень сложно написать целочисленную подпрограмму, которая работает с этим форматом, но написание подпрограммы для проверки строк очень просто.

В целом, это иллюстрирует некоторые полезные советы для написания вопросов. Задайте вопрос о проблеме, которую вы действительно должны решить .Вы приняли решение - проанализировали строку как целое число - и затем начали задавать вопросы о предполагаемом решении.Это автоматически лишает кого-либо возможности давать советы, относящиеся к вашей реальной проблеме.Возможно, кто-то, читающий это, уже разработал библиотеку программного обеспечения для проверки почтовых индексов;если они это сделают, они никогда не узнают об этом из вашего первоначального вопроса.

10 голосов
/ 06 мая 2011

Я не верю, что в BCL есть такой метод, но его легко написать (я предполагаю, что вы действительно говорите о том, может ли строка быть проанализирована как целое число):

public static bool CanParse(string text)
{
    int ignored;
    return int.TryParse(text, out ignored);
}

Добавьте перегрузки, принимающие значения IFormatProvider и т. Д., По мере необходимости.Предполагая, что это для проверки, вы можете расширить ее, чтобы также можно было указать диапазон допустимых значений ...

Если вы выполняете много пользовательских проверок, вы можете посмотретьв проекте Свободная проверка .

2 голосов
/ 06 мая 2011

Этого можно добиться с помощью методов расширения:

Вы используете

bool isNumber = "-1990".IsNumber();

Вот код:

public static class NumberStringExtension
{

    public static bool IsNumber(this string value)
    {
        int i = 0;
        return int.TryParse(value, out i));
    }

}
1 голос
/ 06 мая 2011

Проверьте, дает ли int.TryParse ответ, и убедитесь, что во входной строке нет десятичной точки.(Это даст вам ложное срабатывание, если кто-то введет «1.» в качестве ввода.)

string input;
int ignored;

bool wholeNumber = int.TryParse(input, out ignored) && input.indexOf('.') == -1;
1 голос
/ 06 мая 2011

Используйте Int.TryParse Или создайте пользовательскую функцию.

function bool IsNumber(object number)
{
  try
  {
    Convert.ToInt32(number.ToString());
    return true;
  }
  catch
  {
   return false;
  }
}
0 голосов
/ 06 мая 2011

Поскольку каждое целое число является целым числом, это просто:

public static bool IsWholeNumber(int i)
{
    return true;
}
0 голосов
/ 06 мая 2011

Если вы просто хотите проверить это в операторе if, вы можете просто сделать

If ( val % 1 > 0)
  //not whole number
0 голосов
/ 06 мая 2011

int типы должны быть целыми числами по определению.Это должен быть тип double, число с плавающей запятой или десятичное число, чтобы быть не целым числом.Вы всегда можете попробовать проверить тип ввода.

Или, может быть, ввод является строкой?Если входные данные являются строкой, вы можете попробовать найти «.»или символ «,» (в зависимости от культуры).Или вы можете попробовать разбор как целое число.

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