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?)null
和new int?()
关于性能,最小IL代码,最佳实践等?
通常我一直在赞成上面的代码的new int?()
版本,但我不确定铸造(int?)null
是否比编译器更快地解析为new int?()
。
干杯!
我同意你的意见。 '(int?)null'看起来好于'new int?()',尤其是当在我的示例中显示的内联条件语句中使用时。关于你的问题:当你说IL是相同的时候你回答了。构建时间目前不是问题(除非我使用TFSBuild,但这是一个完全不同的故事),所以只要IL匹配,我很高兴:) – Codesleuth 2010-02-11 10:26:09
我最喜欢的(与铸造版本作为非常接近的第二)是'default(int?)'。 – sblom 2012-12-14 00:47:30