2009-07-08 2 views
6

Мне нужна была функция, которая просто проверяет , если строка может быть преобразована в действительное целое число (для проверки формы).Есть ли лучший способ определить, может ли строка быть целым, кроме try/catch?

После поиска, я закончил использовать функцию, которая была у меня с 2002 года, которая работает с использованием C# 1 (ниже).

Однако мне кажется, что хотя приведенный ниже код работает, является неправильным использованием try/catch, чтобы использовать его, чтобы не поймать ошибку, а определить значение.

Есть ли лучший способ сделать это в C# 3?

public static bool IsAValidInteger(string strWholeNumber) 
{ 
    try 
    { 
     int wholeNumber = Convert.ToInt32(strWholeNumber); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

Ответ:

ответ Джона ниже помогли мне построить функцию я был после того, как без Try/уловом. В этом случае пустое текстовое поле также считается действующий «целое число» в моей форме:

public static bool IsAValidWholeNumber(string questionalWholeNumber) 
{ 
    int result; 

    if (questionalWholeNumber.Trim() == "" || int.TryParse(questionalWholeNumber, out result)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

ответ

33
if (int.TryParse(string, out result)) 
{ 
    // use result here 
} 
+2

И long.TryParse для 64-битных значений тоже. – devstuff

11

Это, вероятно, не будет намного быстрее, но, по крайней мере, его выглядит чище (без обработки исключений):

public static bool IsAValidInteger(string strWholeNumber) 
{ 
    int wholeNumber; 
    return int.TryParse(strWholeNumber, out wholeNumber); 
} 
+2

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

+3

Я подозревал, что. Я как раз собирался проверить это ... но теперь нет смысла, потому что, поскольку Джон Скит подтвердил это :-) –

6

Вы ищете Int32.TryParse().

public void Foo(String input) 
{ 
    Int32 number; 
    if (Int32.TryParse(input, out number)) 
    { 
     DoStuff(number); 
    } 
    else 
    { 
     HandleInvalidInput(input); 
    } 
} 

В вашем конкретном случае я бы использовал следующее.

public static Boolean IsValidInt32(String input) 
{ 
    Int32 number; 
    return Int32.TryParse(input, out number); 
} 
-4

Метод try/catch является допустимым решением, поскольку для многих типов не используются методы TryParse. Таким образом, вы возвращаетесь к основному варианту слева.

+0

Это не отвечает на вопрос (т. Е. String to integer). –

+0

Он делает. Это говорит автору, что лучшего варианта нет. – User

+0

На самом деле для целых чисел есть лучший вариант, как упоминалось выше. – Residuum

Смежные вопросы