是“如果”条件比好? 和铸造(Is “If” condition better than ??

2019-08-03 11:56发布

我有以下的相同的功能两种方式 - 一个用“如果”条件和一个用“? 和铸造”。哪种方法更好?为什么?

码:

  Int16? reportID2 = null;
  //Other code

  //Approach 1
  if (reportID2 == null)
  {
       command.Parameters.AddWithValue("@report_type_code", DBNull.Value);
  }
  else
  {
     command.Parameters.AddWithValue("@report_type_code", reportID2);
  }

  //Approach 2
  command.Parameters.AddWithValue("@report_type_code", ((object) reportID2) ?? DBNull.Value);

UPDATE

根据答案,以下是好处??

  1. 增加可读性
  2. 降低支化deapth程序流(减少圈复杂度)的

注:铸件的成本为研究对象是可以忽略不计。

参考

  1. 空Coallescing运营商-为什么铸造?

Answer 1:

我总是用空合并运算在这种情况下:

command.Parameters.AddWithValue("@name", value ?? DBNull.Value);

command.ExecuteScalar() as int? ?? -1;

等等

它提高了代码的可读性,减少分支深度。 也是为与数据库相关的方案,如ADO.NET特别创建的。



Answer 2:

空合并运算符( ?? )是一个更好的方法,因为它做同样的事情作为你的初始块,但在一个单一的,易于读取线。 这使得代码更易读和更易于维护。

这是语法糖许多例子之一,也就是代码语句这是“捷径”为代表的常用概念。 i++是的这个另一实例中,因为它代替i = i + 1 。 这是更清洁和更简单,只是想??



Answer 3:

在你的榜样,方法2时更好。 你不应该重复自己 ,并apprach 1具有代码和参数名的两倍。 如果你想改变paramater名字,你应该这样做,在两个地方,这是一个麻烦。

真正的代码比较这对是这样的:

object value = DBNull.Value;
if (reportID2 != null)
{
    value = reportID2;
}
command.Parameters.AddWithValue("@report_type_code", value);

如果你使用这个或?? 运营商是个人喜好的问题。 我认为if是比较明确的,尤其是因为你需要括号和聚结操作的情况下铸造。



Answer 4:

我更喜欢的?? 运营商。 虽然简洁并不总是带来更好的可读性,在这种情况下,它确实是因为作为读者你没有比较的是平等的,什么是两行之间的不同ifelse 。 此外,还消除了重复的代码(这是一件好事!)。 考虑您重新命名数据库字段名的情况下@report_type_code 。 然后,你只需要在一个地方改变它。



文章来源: Is “If” condition better than ?? and casting