0

在将一些代码从我的测试项目转移到以 Windows CE 为目标的“真实”项目时,一些代码在 IDE 中变得尴尬并变红,即“TryParse()”。

由于缺乏……马蹄铁,战斗失败了;希望 TryParse() 的缺乏不会导致类似healthcare.gov 的eCatastrophe;然而,有没有比 TryParseless 解析器重写 TryParse() 更好的方法:

int recCount = 0;
string s = "42";
try {
    recCount = Int32.Parse(s);      
}
catch {
    MessageBox.Show("That was not an int! Consider this a lint-like hint!");
}

?

4

4 回答 4

3

考虑s是一个字符串值,您不能将其转换为int. 如果int.TryParse不可用,那么您可以创建自己的方法,该方法将返回一个 bool 。就像是:

public static class MyIntConversion
{
    public static bool MyTryParse(object parameter, out int value)
    {
        value = 0;
        try
        {
            value = Convert.ToInt32(parameter);
            return true;
        }
        catch
        {
            return false;
        }
    }
}

然后使用它:

int temp;
if (!MyIntConversion.MyTryParse("123", out temp))
{
     MessageBox.Show("That was not an int! Consider this a lint-like hint!");
}

int.TryParse内部用于try-catch进行解析,并以类似的方式实现。

于 2013-11-26T17:54:15.163 回答
2
public bool TryParseInt32( this string str, out int result )
{
    result = default(int);

    try
    {
        result = Int32.Parse( str );
    }
    catch
    {
        return false;
    }

    return true;
}

用法:

int result;
string str = "1234";

if( str.TryParseInt32( out result ) )
{
}
于 2013-11-26T17:55:44.040 回答
1

我假设s是一个字符串。如果是这样,您的代码将无法正常工作。以下代码应该:

int recCount = 0;
try {
    recCount = Int32.Parse(s);      
}
catch {
    MessageBox.Show("That was not an int! Consider this a lint-like hint!");
}
于 2013-11-26T17:51:59.150 回答
1

您可以使用正则表达式。

public bool IsNumber(string text)
{
    Regex reg = new Regex("^[0-9]+$");
    bool onlyNumbers = reg.IsMatch(text);
    return onlyNumbers;
}
于 2013-11-26T18:00:56.463 回答