Что такое эквивалент С# для NaN или IsNumeric?
Каков наиболее эффективный способ тестирования входной строки, содержит ли она числовое значение (или, наоборот, Not A Number)? Я предполагаю, что могу использовать Double.Parse
или регулярное выражение (см. Ниже), но мне было интересно, есть ли какой-нибудь встроенный способ сделать это, например javascript NaN()
или IsNumeric()
(было то, что VB, я не могу вспомнить?).
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
Ответы
Ответ 1
Это не имеет служебных ресурсов регулярного выражения
double myNum = 0;
String testVar = "Not A Number";
if (Double.TryParse(testVar, out myNum)) {
// it is a number
} else {
// it is not a number
}
Кстати, все стандартные типы данных с явным исключением GUID поддерживают TryParse.
Обновление
secretwep подсказал, что значение "2345" будет проходить вышеуказанное испытание как число. Однако, если вам нужно убедиться, что все символы в строке являются цифрами, тогда необходимо принять другой подход.
пример 1:
public Boolean IsNumber(String s) {
Boolean value = true;
foreach(Char c in s.ToCharArray()) {
value = value && Char.IsDigit(c);
}
return value;
}
или если вы хотите быть немного более фантастическим
public Boolean IsNumber(String value) {
return value.All(Char.IsDigit);
}
Ответ 2
Я предпочитаю что-то вроде этого, он позволяет вам решить, что NumberStyle
для тестирования.
public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
Double temp;
Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
return result;
}
Ответ 3
В дополнение к предыдущим правильным ответам, вероятно, стоит отметить, что "Не число" (NaN) в его общем использовании не эквивалентно строке, которая не может быть оценена как числовое значение, NaN обычно понимается как числовое значение, используемое для представления результата "невозможного" вычисления, где результат undefined. В этом отношении я бы сказал, что использование Javascript немного вводит в заблуждение. В С# NaN определяется как свойство одиночного и двойного числовых типов и используется для прямой ссылки на результат погружения нуля на ноль. Другие языки используют его для представления разных "невозможных" значений.
Ответ 4
Мне нравится метод расширения, но не люблю бросать исключения, если это возможно.
Я выбрал метод расширения, в котором лучше всего 2 ответа.
/// <summary>
/// Extension method that works out if a string is numeric or not
/// </summary>
/// <param name="str">string that may be a number</param>
/// <returns>true if numeric, false if not</returns>
public static bool IsNumeric(this String str)
{
double myNum = 0;
if (Double.TryParse(str, out myNum))
{
return true;
}
return false;
}
Ответ 5
VB имеет функцию IsNumeric
. Вы можете ссылаться на Microsoft.VisualBasic.dll
и использовать его.
Ответ 6
Простое расширение:
public static bool IsNumeric(this String str)
{
try
{
Double.Parse(str.ToString());
return true;
}
catch {
}
return false;
}
Ответ 7
Вы все еще можете использовать функцию Visual Basic на С#. Единственное, что вам нужно сделать, это просто следовать моим инструкциям, показанным ниже:
- Добавьте ссылку на библиотеку Visual Basic, щелкнув правой кнопкой мыши на своем проекте и выбрав "Добавить ссылку":
![enter image description here]()
-
Затем импортировать в свой класс, как показано ниже:
с использованием Microsoft.VisualBasic;
-
Далее используйте его везде, где хотите, как показано ниже:
if (!Information.IsNumeric(softwareVersion))
{
throw new DataException(string.Format("[{0}] is an invalid App Version! Only numeric values are supported at this time.", softwareVersion));
}
Надеюсь, это поможет и удачи!
Ответ 8
Я знаю, что на это ответили по-разному, с расширениями и примерами лямбда, но они сочетаются как для простейшего решения.
public static bool IsNumeric(this String s)
{
return s.All(Char.IsDigit);
}
или если вы используете Visual Studio 2015 (С# 6.0 или выше), то
public static bool IsNumeric(this String s) => s.All(Char.IsDigit);
Awesome С# 6 на одной строке. Конечно, это ограничено, потому что оно просто проверяет только числовые символы.
Чтобы использовать, просто введите строку и вызовите на ней метод, например:
bool IsaNumber = "123456".IsNumeric();
Ответ 9
public static bool IsNumeric(string anyString)
{
if (anyString == null)
{
anyString = "";
}
if (anyString.Length > 0)
{
double dummyOut = new double();
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true);
return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut);
}
else
{
return false;
}
}
Ответ 10
Возможно, это функция С# 3, но вы можете использовать double.NaN
.
Ответ 11
Да, IsNumeric - это VB. Обычно люди используют метод TryParse(), хотя он немного неуклюж. Как вы предположили, вы всегда можете написать свой собственный.
int i;
if (int.TryParse(string, out i))
{
}
Ответ 12
На самом деле, Double.NaN
поддерживается во всех версиях .NET версии 2.0 и выше.
Ответ 13
Я использовал фрагмент Chris Lively (выбранный ответ), инкапсулированный в функцию bool, например, предложение Gishu в течение года или двух. Я использовал его, чтобы убедиться, что некоторые строки запроса были только числовыми, прежде чем продолжить обработку. Я начал получать некоторые ошибочные querystrings, что отмеченный ответ не обрабатывался, в частности, всякий раз, когда запятая была передана после числа, такого как "3645" (возвращено верно). Это результирующий мод:
static public bool IsNumeric(string s)
{
double myNum = 0;
if (Double.TryParse(s, out myNum))
{
if (s.Contains(",")) return false;
return true;
}
else
{
return false;
}
}