Casting(int?)null与new int?() - 哪个更好?

时间:2010-02-11 10:01:21

标签: c# performance nullable

当我需要将值加载到类和结构中时,我会使用Nullable<T>类型,例如从数据库加载可空值(如下例所示)。

考虑这段代码:

public class InfoObject
{
    public int? UserID { get; set; }
}

// Load the ID into an SqlInt32
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID"));

当我需要将值加载到可空属性中时,有时我会这样做:

infoObject.UserID = userID.IsNull ? (int?)null : userID.Value;

有时我会这样做:

infoObject.UserID = userID.IsNull ? new int?() : userID.Value;

虽然他们取得了相同的结果,但我想知道是否有人知道在(int?)nullnew int?()之间哪个更好用于性能,最小的IL代码,最佳做法等?

一般来说,我一直偏爱上面代码的new int?()版本,但我不确定编译器(int?)null的编译速度是否比new int?()更快。

干杯!

1 个答案:

答案 0 :(得分:8)

他们将生成相同的IL。使用您觉得更容易阅读的内容。

当你谈到“编译器更快解决”的问题时,你是在谈论微优化你的 build 次吗?我不知道哪个会更快,但我怀疑它会为任何重要的代码体系带来可靠的可衡量的差异。

就我个人而言,我个人使用null时没有含糊不清;我想我仍然倾向于使用强制转换来调用new,但它没有什么区别。