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

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

有:

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

得到“无法从’输出字符串’转换为’输出int’

该怎么办?

编辑:

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

/ M

首先,为什么要尝试将字符串解析为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; } } 

这是Int32.TryParse的正确使用:

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

这个怎么样?

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

最简单的…

 Int N = Int.TryParse(somestring, N) ? N : 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; } } 

你想做这样的事吗?

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

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

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

你需要这样的东西……

 Int categoryID = 0; string strCategoryID = "somestringmaybeitsaninteger"; int.TryParse(strCategoryID, out categoryID); 

**这个答案被大量投票**尽管这是一个可能的解决方案 – 这是一个糟糕的表现明智,可能不是一个好的编程选择。

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

使用try和catch

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