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?)null
和new int?()
之间使用哪个更好的性能,最小的IL代码,最佳实践等?
一般来说我一直偏爱上面代码的new int?()
版本,但是我不确定对于编译器来说,cast (int?)null
是否比new int?()
更快。
干杯!
它们将生成相同的IL。 使用您觉得更容易阅读的内容。
当你谈到“编译器更快解决”的问题时,你是在谈论微优化你的构建时间吗? 我不知道哪个会更快,但我怀疑它会为任何重要的代码体系带来可靠的可衡量的差异。
就个人而言,无论什么时候我都可以使用null
,没有歧义; 我想我仍然更喜欢演员来称呼new
,但这并没有什么不同。