C# 要抛出的异常而不是NullReferenceException?

C# 要抛出的异常而不是NullReferenceException?,c#,exception,null,nullreferenceexception,argumentnullexception,C#,Exception,Null,Nullreferenceexception,Argumentnullexception,c代码# 如果我抛出NullReferenceException,它将生成一个警告,这不是一个好方法 那么,如果存在任何异常而不是NullReferenceException?我发现ArgumentNullException,但它对这段代码不太合适,因为b不是一个参数。正如@AlexeiLevenkov在他的评论中所说,选择一个异常类型取决于个人的选择。但是,您应该遵守一些准则。例如,正如您所看到的,不从代码中抛出NullReferenceException 正如您所料,提供了一些非常合理的指导

c代码#

如果我抛出NullReferenceException,它将生成一个警告,这不是一个好方法


那么,如果存在任何异常而不是NullReferenceException?我发现ArgumentNullException,但它对这段代码不太合适,因为b不是一个参数。

正如@AlexeiLevenkov在他的评论中所说,选择一个异常类型取决于个人的选择。但是,您应该遵守一些准则。例如,正如您所看到的,不从代码中抛出
NullReferenceException

正如您所料,提供了一些非常合理的指导方针


关于您的实际问题,如果自定义异常不合适,我可能会使用
invalidooperationexception
。在这种情况下,如果函数get(a)是确定性的,我建议抛出ArgumentException并说明a的允许范围

即抛出新的ArgumentException(“参数a必须是…””,“a”)


如果函数get(a)是不确定的(我们不能说什么是可接受的范围),则ApplicationException会显示一些关于原因的消息(即“由于服务器当前正忙,无法执行操作”).

异常的选择主要是个人偏好-因此这可能不适合这样的问题。@AlexeiLevenkov如果我使用ArgumentNullException,那么参数必须是“a”,否则,它将产生另一个警告,但我希望记录b为空。为什么要生成异常?我会使用
bool方法(inta)
returntrue
returnfalse
否则你可以看看这篇文章:如果你觉得异常是正确的方法,为什么不创建你自己的异常类,例如,
public class GetFailureException:exception
。您只需要重写类中的标准构造函数。@JohnD,您的建议很好,但我不会创建我的异常,因为它们不会签署我的代码:p。我搜索了项目代码,发现他们使用ArgumentException来处理这件事。谢谢!
void method(int a)
{
    int b = get(a);
    if ( b == 0 )
    {
        throw new NullReferenceException();
    }
}