C#:我应该抛出 ArgumentException 还是 DirectoryNotFoundException?

标签 c# exception

我有一个将目录路径作为字符串的方法。在该方法的开头,它检查此路径是否存在,如果不存在,则应抛出异常。我认为它可能应该抛出 DirectoryNotFoundException 或其他东西,而不是不太具体的 ArgumentException

我阅读了那个 DirectoryNotFoundException 的 msdn 文档,它是这样说的

DirectoryNotFoundException uses the HRESULT COR_E_DIRECTORYNOTFOUND which has the value 0x80070003.

我不知道这到底是什么意思,它看起来有点吓人……我应该仍然抛出那个异常,还是应该坚持使用常规的 ArgumentException?或者我应该坚持 ArgumentException 只是因为它是我提示的一个论点?或者?

public void MakeFunOf(string path)
{
    if(!Directory.Exists(path))
        throw new WhatException();
    TellJokeAbout(path);
    PointAndLaughAt(path);
}

最佳答案

如果您希望开发人员在调用您的方法之前检查目录是否存在,请使用 ArgumentException。如果您希望开发人员可以选择处理丢失的目录,请使用 DirectoryNotFound 异常。

换句话说,“开发人员告诉我访问不存在的目录是错误吗?”

就个人而言,我会使用 DirectoryNotFound 异常。

关于C#:我应该抛出 ArgumentException 还是 DirectoryNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073038/

相关文章:

c++ - 异常处理的顺序重要吗?

java - 扩展异常处理

java - 为什么我不能在方法中抛出异常(Java)

ios - 在对象初始化时为错误的参数值Objective-C引发错误

c# - 带有 Unity 的 Automapper - 在哪里放置 CreateMap 的东西?

c# - 如何显示 C# 窗口服务的系统托盘图标?

c# - Hangfire 即使在不活动时也会继续运行 SQL 查询

c# - 参数化查询 ..... 需要参数 '@units' ,但未提供

c# - 在 Selenium C# 中选择单选按钮

c# - 在组连接 linq 查询中将字符串转换为十进制