如果无法将字符串解析为int,是否有某种返回null的方法?
和:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
得到“无法从'out string'转换为'out int'
该怎么办?
编辑:
由于asp.net限制不再相关是解决问题的方法
/米
首先,您为什么要尝试将字符串解析为 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, out N) ? N : 0;
它有效,因为它是从左到右评估的。Null 没那么容易。
** 这个答案被否决了很多 ** 虽然它是一个可能的解决方案 - 它是一个糟糕的性能明智的选择,并且可能不是一个好的编程选择。
我不会删除它,因为我猜很多程序员可能没有意识到这一点,所以这里是一个如何不做的例子:
使用 try and catch
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}
Int 是一种值类型,这意味着没有 null int 之类的东西。所以不,TryParse 永远不会改变 out 参数,使其为空。
但是你遇到的问题是当它需要一个整数时,你将一个字符串传递给 TryParse 的 out 参数。
你需要这样的东西...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
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;
}
}