抛出正确的异常类型

时间:2018-07-31 19:42:40

标签: c# exception architecture parameter-passing

例如,我有一个方法服务,该服务从源获取一些数据,对这些数据进行处理,然后返回到服务的客户端:

x=np.zeros(10)
y=np.arange(0,10,1)
trace1=go.Scatter(x=x, y=y)
data1=[trace1]
`enter code here`plotly.offline.iplot(data1)

实施的第一行:

DriverProfilerInfoDomain GetDriverProfilerInfo(int id);

,但驱动程序可以为null(从客户端传递无效的ID)。抛出什么异常会更好?我扔了 public DriverProfilerInfoDomain GetDriverProfilerInfo(int id) { var driver = (from i in _db.Drivers where i.Id == id select ....) ,但可能应该像NullReferenceException一样? 从文档中:

https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions

  

抛出ArgumentException异常或预定义的类之一   如果传递了无效参数,则从ArgumentException派生。

因此,无效的id是无效的参数。但是什么具体类型? ArgumentException吗?

https://docs.microsoft.com/ru-ru/dotnet/api/system.argumentnullexception?view=netframework-4.7.2

  

空引用时引发的异常(Visual中没有   基本)传递给不接受为有效方法的方法   论点。

但是传递的参数不为null,在源代码中只是“未找到” ...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您关心呼叫者,则可以通过引发ArgumentException使他们知道发生了什么:

   throw new ArgumentException($("{id} is not valid driver id."),"id");

您不需要更具体的类型来表明该参数无效。

ArgumentException优于NullReferencException的好处是,对于呼叫者来说,发生的事情更加清楚:

Object reference not set to an instance of an object

没有这个意义

42 is not a valid driver id. Parameter name: id

但是,在许多情况下,仅让NullReferenceException发生就可以了,而无需自己提出任何异常。当您访问null对象时,运行时将为您引发NullReferenceException。