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

当我将值加载到类和结构中时,我需要Nullable类型,当我需要它们可以为空时,例如从数据库加载可空值(如下例所示)。

考虑以下代码片段:

 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?()版本,但是我不确定对于编译器来说,cast (int?)null是否比new int?()更快。

干杯!

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

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

就个人而言,无论什么时候我都可以使用null ,没有歧义; 我想我仍然更喜欢演员来称呼new ,但这并没有什么不同。