null或空检查的代码优化

时间:2016-12-21 05:17:46

标签: c# .net performance optimization

您好我正在检查 datatable 行值。如果该值不为null或为空,则检查该值是否为数字。否则请加入错误列表。如果值为null或为空,则指定null。

代码工作正常,但我想检查是否有更好的方法来执行此操作。任何建议将不胜感激。

这是我的代码。

if (!(row.IsNull("limit") || row["limit"].ToString().Length == 0))
{
    //Check if value is number
    if (int.TryParse(row["limit"].ToString().Trim(), out n))
    {
        query.limit = Convert.ToInt32(row["limit"].ToString().Trim());

    }
    else
    {
        errorList.Add("limit: Value:" + row["limit"].ToString());
    }

}
//if value is null then assign null
else
{
    query.limit = null;
}

1 个答案:

答案 0 :(得分:4)

我在这里提到几点:

  • 使用int.TryParse解析row["limit"],您将在out参数中获得转换后的值,然后您无需使用Convert.ToInt32将其再次转换为整数,请使用out参数而不是。
  • 可以使用NullConditional运算符(if)简化第一个?.
  • 他们可能有机会将row作为null,在这种情况下,您需要在访问null之前检查row["limit"],否则NullReference将成为结果

如果您这样做,我认为会更加清晰和简单:

if (row != null && row["limit"]?.ToString() != "") // means row["limit"] definitely has some value
{
    int currentLimit = 0;
    if (int.TryParse(row["limit"].ToString().Trim(), out currentLimit))
    {
        query.limit = currentLimit ;   
    }
    else  
    { 
        errorList.Add("limit: Value:" + row["limit"].ToString());  
    } 
}
else
{
    query.limit = null;
}

如果你没有使用c#6,那么row["limit"]?.ToString()将不起作用,在这种情况下你必须使用这样的条件:

  if (row != null && row["limit"] != null && row["limit"].ToString() != "")