gpt4 book ai didi

c# - 基于参数抛出/不抛出异常 - 为什么这不是一个好主意?

转载 作者:太空狗 更新时间:2023-10-29 20:02:22 25 4
gpt4 key购买 nike

我在 MSDN 中四处搜索并找到了 this article其中有一个有趣的建议:不要有可以根据某些选项抛出或不抛出异常的公共(public)成员。

例如:

Uri ParseUri(string uriValue, bool throwOnError)

现在我当然可以看到在 99% 的情况下这会很糟糕,但偶尔使用它是否合理?

我看到它使用的一个案例是在访问数据库或配置文件中的数据时使用“AllowEmpty”参数。例如:

object LoadConfigSetting(string key, bool allowEmpty);

在这种情况下,备选方案是返回 null。但是随后调用代码将充满空引用检查。 (如果您愿意,该方法还会排除实际允许 null 作为特定可配置值的能力)。

你有什么想法?为什么这会成为一个大问题?

最佳答案

我认为基于 bool 值来决定 throw /不 throw 绝对不是一个好主意。即因为它要求开发人员查看一段代码以了解 API 的功能知识以确定 bool 值的含义。这本身是不好的,但是当它改变了底层的错误处理时,它会使开发人员在阅读代码时很容易犯错误。

在这种情况下,如果有 2 个 API 会更好,也更具可读性。

Uri ParseUriOrThrow(string value);

bool TryParseUri(string value, out Uri uri);

在这种情况下,100% 清楚这些 API 的作用。

关于为什么 bool 值作为参数不好的文章:http://blogs.msdn.com/jaredpar/archive/2007/01/23/boolean-parameters.aspx

关于c# - 基于参数抛出/不抛出异常 - 为什么这不是一个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/624647/

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