如果无法将字符串解析为int,有什么方法可以返回null吗?
使用:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
获取“无法从'out string'转换为'out int'
该怎么办?
编辑:
由于asp.net约束不再相关是解决问题的方法
/ M
答案 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;
}
}