LCJ*_*LCJ 10 c# performance casting null-coalescing-operator
我有两种相同功能的方法 - 一种是"if"条件,另一种是"??" 和铸造".哪种方法更好?为什么?
码:
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);
Run Code Online (Sandbox Code Playgroud)
UPDATE
根据答案,以下是的好处 ??
注意:作为对象的铸造成本可以忽略不计.
参考
Lev*_*lho 10
空合并运算符(??
)是一种更好的方法,因为它与初始块的作用相同,但是在一条易读的行中.这使代码更具可读性和可维护性.
这是语法糖的许多例子之一,也就是说代码语句是表示常用想法的"快捷方式".i++
这是另一个例子,因为它取代了i = i + 1
.它更干净,更简单,就像??
.
在这种情况下,我总是使用空合并运算符:
command.Parameters.AddWithValue("@name", value ?? DBNull.Value);
command.ExecuteScalar() as int? ?? -1;
Run Code Online (Sandbox Code Playgroud)
ETC。
它增加了代码的可读性,减少了分支深度。也是专门为数据库相关场景(例如 ADO.NET)创建的。