Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中组织自定义异常#_C#_Custom Exceptions - Fatal编程技术网

C# 在C语言中组织自定义异常#

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

我正在创建一个C#应用程序,并试图在适当的时候利用自定义异常。我在这里查看了其他问题和MSDN设计指南,但没有遇到任何像我在这里所想的那样具体的问题

如何组织自定义异常的最佳实践是什么

例如,我有一个类
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,因此您的文件夹结构(至少对于异常)与名称空间不匹配,对吗?我可以看到将所有异常放在一个地方,然后继续适当地对它们进行名称空间命名的好处。这似乎违背了让名称空间与文件夹结构匹配的做法,对吗?我想你已经发现它比没有更有益了?不确定为什么这里没有注释的否决票——但是在你描述的上下文中,所有涉及的过程不都需要从同一组程序集中工作,不管异常是否在它们自己的程序集中定义?但是,如果您声明异常可以独立于系统的其余部分,并且有理由独立部署它们?