C# 在C语言中组织自定义异常#
我正在创建一个C#应用程序,并试图在适当的时候利用自定义异常。我在这里查看了其他问题和MSDN设计指南,但没有遇到任何像我在这里所想的那样具体的问题 如何组织自定义异常的最佳实践是什么 例如,我有一个类C# 在C语言中组织自定义异常#,c#,custom-exceptions,C#,Custom Exceptions,我正在创建一个C#应用程序,并试图在适当的时候利用自定义异常。我在这里查看了其他问题和MSDN设计指南,但没有遇到任何像我在这里所想的那样具体的问题 如何组织自定义异常的最佳实践是什么 例如,我有一个类Disk,它抛出一个InvalidDiskException磁盘是引发此异常的唯一类 目前,我将异常嵌套在Disk.cs文件中,如下所示: Disk.cs using System; using System.Collections.Generic; using System.Linq; usin
Disk
,它抛出一个InvalidDiskException
<代码>磁盘是引发此异常的唯一类
目前,我将异常嵌套在Disk.cs文件中,如下所示:
Disk.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OrganizingExceptionsInCSharp
{
class Disk
{
[Serializable]
public class InvalidDiskException : Exception
{
public InvalidDiskException() { }
public InvalidDiskException(string message) : base(message) { }
public InvalidDiskException(string message, Exception innerException) : base(message, innerException) { }
}
//
// Code that throws the exception.
//
}
}
是否应在与磁盘相同的级别定义异常(即不嵌套在磁盘中)?异常是否应该嵌套在磁盘中,但保留它自己的部分文件?还有其他更好的选择吗?请告诉我是否还有我没有想到的其他注意事项。自定义异常IMHO应该位于它们自己的独立程序集中,原因很简单:如果您最终将它们抛出进程/机器边界,则涉及的每个进程都可能会遇到问题(从而导致另一个异常)如果它们对自定义异常没有共同的理解。我会在{MyNamespace}中定义自定义异常。异常我个人认为嵌套类没有任何意义,除非将嵌套类设置为私有。如果它们是公共的,那么嵌套除了使外部引用更加详细之外没有其他用途。我通常会在它自己的文件中定义每个类,因为这样可以更容易地浏览应用程序的结构。除此之外,我正在看这段代码,想知道InvalidDiskException给了我什么,而IOException没有?除非你要特别地捕捉这个错误,否则在这里创建自定义异常有什么意义呢?我支持James。嵌套类对我来说是私有类,它们在父类中只有一个用途(使父类更干净)。通常,我们将异常放置在给定项目中它们自己的文件夹中,但是名称空间与通常引发异常的位置相同。James,我嵌套异常是为了提供上下文,即该类是唯一使用它的类,即使它是公共的。无效磁盘是指没有特定文件的磁盘。因此,此时将引发
InvalidDiskException
。它是在其他地方专门处理的,只是代码在这里似乎不相关。@KyleTolle如果您因为特定文件不存在而抛出它,System.IO.FileNotFoundException
可以用于simon,因此您的文件夹结构(至少对于异常)与名称空间不匹配,对吗?我可以看到将所有异常放在一个地方,然后继续适当地对它们进行名称空间命名的好处。这似乎违背了让名称空间与文件夹结构匹配的做法,对吗?我想你已经发现它比没有更有益了?不确定为什么这里没有注释的否决票——但是在你描述的上下文中,所有涉及的过程不都需要从同一组程序集中工作,不管异常是否在它们自己的程序集中定义?但是,如果您声明异常可以独立于系统的其余部分,并且有理由独立部署它们?