在我们的 C# 代码中,我们已经在尝试访问变量之前测试了它是否为空。
if (myInt.HasValue) {
var yourInt = myInt;
// do something with yourInt
}
我的问题:使用可空属性是否有区别,就好像它不是在经过测试之后与以下一样?
if (myInt.HasValue) {
var yourInt = myInt.Value; // see the difference?
// do something with yourInt
}
这只是一个偏好问题,还是.Value
即使在可空对象通过了该测试之后使用也有明显的原因或性能影响?
更新
我扩展了我的第二个示例,我们已经使用 进行了测试HasValue
,但是我们使用它.Value
来访问该值。
更新 2
我更新了使用var
s 的示例,因为在我们的代码中我们实际上并没有使用int
类型,很抱歉这个糟糕的示例。在我们的代码中,我们实际上只是使用 NHibernate Criteria 查询中的对象 -Expression.Eq("thing", myInt)
查询。
这不会引发编译错误。我试图在不涉及 NHibernate 的情况下简化示例以找到问题的根源。抱歉,如果这会使某些答案无效。我只是想看看如果我们强制使用另一种方法来查找值而不是显式调用,是否会影响性能.Value
。