在 int.TryParse 之前进行空值检查

5

我有一些代码需要将许多字符串解析为整数值。

string item = null; //or a value
int result;
if (!string.IsNullOrEmpty(item) && int.TryParse(item, out result))
{
    //do stuff
}

每次都需要检查IsNullOrEmpty吗?如果是null或空,那么解析应该失败。


6
在询问之前,您可以自行进行测试。不,这并不是必需的。如果 TryParse 返回 false,则表示测试未通过。 - Tim Schmelter
如果尝试解析失败,结果将为0。 - A.T.
@TimSchmelter 可以这样做,但这种机械土耳其方法可以为问题提供一种即问即忘的解决方案。花费相似的时间创建一个快速问题,去吃午餐,回来看答案 - 有一些词汇描述这种现象,但它们主要是基于个人观点的;-) - Adam Houldsworth
@TimSchmelter 必定有这个 IsNullOrEmpty 检查的原因。是否因为 TryParse 不是一个简单的方法,通过在之前检查 null,可以提高应用程序性能?如之前所述,在代码中有很多此类检查。 - Toshi
1
@Toshi:为什么一定要有原因呢?我怀疑原因是代码的作者不知道 int.TryParse 可以处理它。事实上,它首先处理了空值情况,所以没有性能差异。 - Tim Schmelter
显示剩余3条评论
3个回答

19

不需要使用String.IsNullOrEmpty,因为Int32.TryParse会返回false。因此以下代码更加简洁:

int result;
if (int.TryParse(item, out result))
{
    //do stuff
}

MSDN:

如果 s 参数为 null 或空字符串 String.Empty,或者不符合正确的格式或表示的数字小于 MinValue 或大于 MaxValue,则转换失败


2

Int.TryParse会返回一个布尔值(如果它成功,则为true),因此您可以编写:

string item = null; //or a value
int result;
if (int.TryParse(item, out result))
{
    //do stuff
}

2

如果您使用.TryParse进行转换,则无需检查空或空字符串。由于如果转换失败,返回值将为false。因此,可以像这样安全地使用:

string item = null; //or a value
int result;
if(int.TryParse(item, out result))
{
    //do stuff
}
else
{
  // you can show conversion failure message here
  // or can proceed with value 0
}

附加说明:如果您正在使用int.Parse进行转换,则最好检查string.IsNullOrEmpty,因为null会导致ArgumentNullException,而空字符串会导致FormatException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接