2010-02-11 74 views
5

当我需要将值加载到类和结构体中时,我使用Nullable<T>10类型相当多,例如从数据库加载可为空的值(如下面的示例)。Casting(int?)null与new int?() - 哪个更好?

考虑这个代码片段:

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?()

干杯!

回答

8

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

当你谈论一些“编译器解决更快”的东西时,你是在谈论微优化你的构建次?我不知道哪里会更快,但我怀疑它会为任何重要的代码块带来可靠的可测量的差异。

我个人使用null只要我可以这样做,毫不含糊;我想我通常更喜欢演员致电new,但它并没有真正的区别。

+0

我同意你的意见。 '(int?)null'看起来好于'new int?()',尤其是当在我的示例中显示的内联条件语句中使用时。关于你的问题:当你说IL是相同的时候你回答了。构建时间目前不是问题(除非我使用TFSBuild,但这是一个完全不同的故事),所以只要IL匹配,我很高兴:) – Codesleuth 2010-02-11 10:26:09

+0

我最喜欢的(与铸造版本作为非常接近的第二)是'default(int?)'。 – sblom 2012-12-14 00:47:30

相关问题