gpt4 book ai didi

c# - 哪些异常类已经存在,我们什么时候使用它们?

转载 作者:行者123 更新时间:2023-11-30 13:18:09 25 4
gpt4 key购买 nike

在 .net 中,C#

Exception 有很多子类已经存在,它们是什么?我们什么时候使用它们而不是创建我们自己的子类?

此问题与 c# is there an exception overview 重复

最佳答案

link provided by Jason非常全面,但其中的许多异常类型(例如 NullReferenceExceptionIndexOutOfRangeException )实际上只被框架抛出;如果您是开发人员,那么明确抛出它们不太合适。

在我看来,这里有一些对开发人员最有用的异常类型。

ArgumentNullException

这很明显:传递给方法的参数之一是 null , 但对于这个特定的方法,一个 null不允许该参数的值。

ArgumentOutOfRangeException

提供给方法的值超出了对该方法有意义的范围。

例子

在大多数采用表示大小或长度的参数的方法中,只有正值对该参数有意义。所以检查如

if (x < 1)
{
throw new ArgumentOutOfRangeException("x");
}

很常见。

FormatException

当您编写自己的自定义文本解析方法时,或者实际上任何期望字符串匹配特定格式的代码,并且提供了一些代码无法理解的输入时,这是一个非常合理的选择。

InvalidOperationException

每当我不确定还可以使用什么时,我往往会经常使用它(实际上可能过度使用它)。一般来说,我认为这种类型传达的是客户出于与当前类或方法相关的原因试图做一些非法的事情。

例子

很多IEnumerator<T>实现抛出 InvalidOperationException当他们枚举的集合被修改时。这是一个合理的设计选择,因为设计一个不处理这种情况的集合类比设计一个处理这种情况的集合类要容易得多。

NotSupportedException

这通常在从某个基类派生的类中有意义,并且只提供该基类的 abstract 的部分实现。成员。

例子

一些开发人员选择编写具有“可选”功能的基类,这些功能可能由派生类提供,也可能不提供。下面是一个例子:

abstract class Animal : Organism
{
public virtual bool EatsPlants
{
get { return false; }
}

public virtual void EatPlant(Plant food)
{
throw new NotSupportedException();
}

public virtual bool EatsAnimals
{
get { return false; }
}

public virtual void EatAnimal(Animal food)
{
throw new NotSupportedException();
}
}

class Herbivore : Animal
{
public override bool EatsPlants
{
get { return true; }
}

public override void EatPlant(Plant food)
{
// whatever
}
}

显然这只是我个人(和主观)的列表;但我认为它可能会让您了解您可以并且应该在您自己的代码中利用哪些类型的异常。

关于c# - 哪些异常类已经存在,我们什么时候使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com