我有以下代码 try catch 空引用。然后它会抛出一个异常,并为 message 属性中指定的错误提供更明确的原因。
应该抛出哪种异常?一个 IndexOutOfRangeException
?var existing = this.GetByItemId(entity.ItemId); // int or long
if (existing == null)
{
throw new IndexOutOfRangeException("The specified item does not exist.");
}
var price = existing.Price;
还是NullReferenceException
?var existing = this.GetByItemId(entity.ItemId);
if (existing == null)
{
throw new NullReferenceException("The specified item does not exist.");
}
var price = existing.Price;
或者,我们应该让异常顺其自然吗?var existing = this.GetByItemId(entity.ItemId);
var price = existing.Price; // NullReferenceException coming your way
我们倾向于不做最后一个选项的原因是默认的 NullReferenceException 没有详细说明并且只是说明
老实说,这很可能是 C# 中最无用的错误消息。
最佳答案
我会为此使用自定义异常(例如 ItemNotFoundException
)。NullReferenceException
内或框架中某处的其他内容可能会抛出IndexOutOfRangeException
或this.GetByItemId()
。
如果项目没有出现在集合中(例如添加它),调用者可能希望执行后续操作。
使用您自己的异常允许调用者专门对异常进行 catch
并做出相应的 react 。
关于c# - IndexNotFoundException 与 NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33520690/