我从一个存储过程从数据库进入可以为空的int,我知道它不会有空值。我做了吼叫:
public List<EngineerDetails> GetCarouselEngineerDetailsList(int customerID)
{
using (var db = new MainEntities80())
{
var foo0= db.procedure().Select(s => new fooo()
{
foo= s.foo,
foo2 = s.foo2,
foo3 = s.foo3 ,
foo4 = s.foo4 ,
x = s.CurrentJobId.Value
}).ToList();
return foo0;
}
}
但我想知道,虽然我知道价值永远存在。在获得价值之前检查是否是好的做法。也许有一个转折表达。 或者因为我们知道如果我们忘记检查它不会为空?
答案 0 :(得分:4)
如果InvalidOperationException
实际上为null,则会抛出s.CurrentJobId
。对于世界的情况来说,这几乎总是最好的结果。世界并不是我期望它的方式&#34;因此,完全按原样使用代码是有意义的。
答案 1 :(得分:0)
if (s.CurrentJobID.HasValue)
{
CurrentJobID = s.CurrentJobID.Value
}
答案 2 :(得分:0)
你可以这样做:
int result = s.CurrentJobId?? Int32.MinValue;
这将确保将x的值赋给result,但如果s.CurrentJobId为null,则将为其分配Int32.MinValue。
它将阻止抛出异常,并且您可以通过检查Int32.MinValue来确认它是否为null。
但是,如果该值确实应该永远不为null,则抛出异常并快速失败是更好的选择。
答案 3 :(得分:-2)
您可以使用CurrentJobID = s.CurrentJobID.GetValueOrDefault()
。
如果遇到NULL,则会生成基础类型的默认值,对于数字,该值始终为0.
或者,如果您想要一个'例外'值,例如-1,那么您可以使用CurrentJobID = s.CurrentJobID.GetValueOrDefault(-1)
执行此操作。