当我需要值可为空时,比如从数据库中加载可为空的值(如下面的示例),我经常使用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;
虽然它们可以达到相同的结果,但我想知道在性能、最小IL代码和最佳实践方面,使用
(int?)null
和 new int?()
哪个更好。通常情况下,我更喜欢使用代码中的 new int?()
版本,但我不确定将 (int?)null
强制转换是否比使用 new int?()
更快速地解析。
(int?)null
看起来比new int?()
好得多,尤其是在像我示例中所展示的内联条件语句中使用时。关于你的问题:你在回答IL相同时就已经回答了它。构建时间目前不是问题(除非我使用TFSBuild,但那是另一个故事),所以只要IL匹配,我就很高兴 :) - Codesleuthdefault(int?)
(紧随其后的是带有cast版本)。 - sblom