当我需要将值加载到类和结构中时,我会使用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?)null
和new int?()
之间哪个更好用于性能,最小的IL代码,最佳做法等?
一般来说,我一直偏爱上面代码的new int?()
版本,但我不确定编译器(int?)null
的编译速度是否比new int?()
更快。
干杯!
答案 0 :(得分:8)
他们将生成相同的IL。使用您觉得更容易阅读的内容。
当你谈到“编译器更快解决”的问题时,你是在谈论微优化你的 build 次吗?我不知道哪个会更快,但我怀疑它会为任何重要的代码体系带来可靠的可衡量的差异。
就我个人而言,我个人使用null
时没有含糊不清;我想我仍然倾向于使用强制转换来调用new
,但它没有什么区别。