use*_*049 3 .net c# exception-handling
在.net中,c#
Exception已经存在很多子类,它们是什么,我们何时使用它们而不是创建自己的子类?
Dan*_*Tao 10
Jason提供的链接非常全面,但它中的许多异常类型(例如NullReferenceException或者IndexOutOfRangeException)实际上只是被框架抛出; 对于你来说,开发人员明确地抛出它们是不合适的.
在我看来,这是开发人员的一些最有用的异常类型.
ArgumentNullException这一点很明显:传递给方法的参数之一是null,但对于这个特定方法,null不允许该参数的值.
ArgumentOutOfRangeException将值提供给超出对该方法有意义的范围的方法.
在采用表示幅度或长度的参数的大多数方法中,只有正值对该参数有意义.所以检查一下
if (x < 1)
{
throw new ArgumentOutOfRangeException("x");
}
Run Code Online (Sandbox Code Playgroud)
常见.
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
}
}
Run Code Online (Sandbox Code Playgroud)
显然这只是我自己的个人(和主观)名单; 但我认为它可能会让你知道你可以在你自己的代码中利用什么样的例外.
| 归档时间: |
|
| 查看次数: |
5316 次 |
| 最近记录: |