有没有更好的方法来确定字符串是否可以是try / catch以外的整数?

时间:2009-07-08 09:58:25

标签: c# validation

我需要函数,只需检查是否可以将字符串转换为有效整数(用于表单验证)。

在搜索之后,我最终使用了2002年的一个函数,它使用C#1(下面)。

然而,在我看来,虽然下面的代码有效,但误用try / catch 来使用它不是为了捕获错误而是为了确定一个值。

在C#3中有更好的方法吗?

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

答案:

John的答案帮助我构建了我没有try / catch的功能。在这种情况下,空白文本框也被视为我的表单中的有效“整数”:

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

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

5 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:11)

这可能不会快得多,但至少它看起来更干净(没有异常处理):

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

答案 2 :(得分: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);
}

答案 3 :(得分:5)

Int32.TryParse

答案 4 :(得分:-4)

try / catch方法是一种有效的解决方案,因为对于许多类型,没有实现TryParse方法。所以你回到基本上只有一个选项。