int.TryParse = null如果不是数字?

时间:2009-11-13 14:14:38

标签: c# .net tryparse

如果无法将字符串解析为int,有什么方法可以返回null吗?

使用:

public .... , string? categoryID) 
{
int.TryParse(categoryID, out categoryID);

获取“无法从'out string'转换为'out int'

该怎么办?

编辑:

由于asp.net约束不再相关是解决问题的方法

/ M

8 个答案:

答案 0 :(得分:27)

首先,为什么要尝试将字符串解析为int并将结果粘贴回字符串?

方法签名是

bool int.TryParse(string, out int)

所以你必须给出一个int类型的变量作为第二个参数。这也意味着如果解析失败,您将无法获得null,而是方法将返回false。但你可以很容易地把它拼凑在一起:

int? TryParse2(string s) {
    int i;
    if (!int.TryParse(s, out i)) {
        return null;
    } else {
        return i;
    }
}

答案 1 :(得分:14)

正确使用Int32.TryParse

int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
    value = dummy;
}
else {
    value = null;
}
return value;

答案 2 :(得分:9)

这个怎么样?

public int? ParseToNull(string categoryId)
{
    int id;
    return int.TryParse(categoryId, out id) ? (int?)id : null;
}

答案 3 :(得分:2)

...最简单

Int N = Int.TryParse(somestring, N) ? N : 0;

它起作用,因为它从左到右进行评估。没那么容易。

答案 4 :(得分:0)

**这个答案被大量投票** 虽然这是一个可能的解决方案 - 但它在性能方面表现不佳,而且可能不是一个好的编程选择。

我不会删除它,因为我猜许多程序员可能没有意识到这一点,所以这里有一个如何不做的例子:

使用try和catch

try
{
res = Int32.Parse(strVAR)
}
catch(exception ex) 
{
 return null;
}

答案 5 :(得分:0)

Int是一个值类型,这意味着没有null int这样的东西。所以不,TryParse永远不会改变out参数,因此它是null。

但是你遇到的问题是当你想要一个整数时,你正在将一个字符串传递给TryParse的out参数。

你需要这样的东西......

Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";

int.TryParse(strCategoryID, out categoryID);

答案 6 :(得分:0)

如果无法解析字符串,

TryParse将返回false。您可以使用此事实返回已解析的值,或返回null。无论如何,我想你打算从你的方法中返回int?,那么它会是这样的:

public int? ParseInt(string categoryID) 
{
    int theIntValue;
    bool parseOk = int.TryParse(categoryID, out theIntValue);
    if(parseOk) {
        return theIntValue;
    } else {
        return null;
    }
}

答案 7 :(得分:0)

你想做这样的事吗?

public int? Parse(string categoryID) 
{
  int value;
  if (int.TryParse(categoryID, out value))
  {
    return value;
  }
  else
  {
    return null;
  }
}