13

如果无法将字符串解析为int,是否有某种返回null的方法?

和:

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

得到“无法从'out string'转换为'out int'

该怎么办?

编辑:

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

/米

4

8 回答 8

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;
    }
}
于 2009-11-13T14:19:25.510 回答
14

这是 的正确用法Int32.TryParse

int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
    value = dummy;
}
else {
    value = null;
}
return value;
于 2009-11-13T14:17:34.070 回答
10

这个怎么样?

public int? ParseToNull(string categoryId)
{
    int id;
    return int.TryParse(categoryId, out id) ? (int?)id : null;
}
于 2009-11-13T14:20:38.083 回答
2

最简单的单线...

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

它有效,因为它是从左到右评估的。Null 没那么容易。

于 2015-06-11T18:22:47.540 回答
0

** 这个答案被否决了很多 ** 虽然它是一个可能的解决方案 - 它是一个糟糕的性能明智的选择,并且可能不是一个好的编程选择。

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

使用 try and catch

try
{
res = Int32.Parse(strVAR)
}
catch(exception ex) 
{
 return null;
}
于 2009-11-13T14:16:16.437 回答
0

Int 是一种值类型,这意味着没有 null int 之类的东西。所以不,TryParse 永远不会改变 out 参数,使其为空。

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

你需要这样的东西...

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

int.TryParse(strCategoryID, out categoryID);
于 2009-11-13T14:16:58.480 回答
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;
    }
}
于 2009-11-13T14:17:30.653 回答
0

你想做这样的事情吗?

public int? Parse(string categoryID) 
{
  int value;
  if (int.TryParse(categoryID, out value))
  {
    return value;
  }
  else
  {
    return null;
  }
}
于 2009-11-13T14:19:18.773 回答