当你知道像下面的例子中 id 应该存在时,检查 null 值是一个好习惯吗?
var submission = _ctx.Submissions.FirstOrDefault(p => p.Id == id);
submission.Done = true;
_ctx.Submissions.Attach(submission);
_ctx.Entry(submission).State = EntityState.Modified;
_ctx.SaveChanges();
当你知道像下面的例子中 id 应该存在时,检查 null 值是一个好习惯吗?
var submission = _ctx.Submissions.FirstOrDefault(p => p.Id == id);
submission.Done = true;
_ctx.Submissions.Attach(submission);
_ctx.Entry(submission).State = EntityState.Modified;
_ctx.SaveChanges();
_ctx.Submissions.Single(p => p.Id == id);
当你无法完全确定对象永远不会为空时,你需要检查null
。
话虽如此,你现在使用的是FirstOrDefault()
。如果它没有符合条件的结果,它将返回null
。
id
可能为空,那么你应该进行处理。你不希望出现程序崩溃的情况。这有点涉及到“基于观点”的领域,因为有些人会想要在 try/catch 中使用自定义异常来处理,或者检查 null 并添加额外的业务逻辑代码。 - TyCobbFirst
而不是FirstOrDefault
。这样做意味着如果代码的某个假设被违反,您将尽快,响亮和尽可能地了解到问题的源头。
FirstOrDefault
应该用于查询没有任何项时完全合理,并返回null
值的情况。如果您处于这种情况,则在查询实际返回null
或其他任何您需要执行的操作的情况下,程序应该正确运行。FirstOrDeafult
。在这里,您最终会得到真正问题在哪里(具有应该有项目的项的查询)。并且还会出现NullReferenceExceptions,这可能需要额外的调试工作来解决。为了编写具有弹性的代码,您应该检查并处理是否submission
为null。
你需要检查 null 值,以防止由于传递 null 值而引发的错误。你可以使用 try catch 块或 if else 块来进行检查。
通过这种方式进行检查,你可以预防可能由 null
值引发的错误。
FirstOrDefault
将你的意图记录为“我期望的结果可能不包含任何项”。在这种情况下,你应该检查 null
并执行一些合理的回退操作。此时抛出异常看起来很奇怪。
听起来在你的情况中,你并不期望空结果,因此使用 First
并将异常处理放在更高的调用栈上,甚至让默认异常处理发生。
FirstOrDefault()
时,您都应该立即检查是否为 null。 - Erik Philipssubmission
是 null,你还能做些有用的事情吗? - Matt BurlandNullReferenceException
是不可接受的时候,你都应该检查是否为null。 - Preston Guillotnull
- 因此无需检查是否可以让整个请求失败。(我认为在我的答案中,FirstOeDefault
不是一个好方法选择)。 - Alexei Levenkov