c# - 我应该抛出异常还是返回false?
问题描述
我正在使用 TDD 在 C# 中开发一个简单的服务定位器。
目前,我创建了一个如下所示的TryAddService
方法:
public bool TryAddService(Type type, object service)
{
if (service == null)
{
return false;
}
if (this.services.ContainsKey(type))
{
return false;
}
if (!type.IsAssignableFrom(service.GetType()))
{
return false;
}
this.services.Add(type, service);
return true;
}
我的问题是,在所有这些情况下我应该返回 false 吗?或者我应该抛出一个异常?
在这种情况下,我的客户将是其他开发人员。
解决方案
正如非正式约定的那样,每当您使用 TryXXXX 模式时,您的方法必须始终成功,但返回实际成功结果为布尔值。如果您想抛出异常,那么只需从您的方法名称中删除“try”字样。
最重要的是,如果您遵循 TryXXXX 模式,我建议您添加一个 try-catch 块,以确保您的方法确实总是成功:
public bool TryAddService(Type type, object service)
{
if (service == null)
{
return false;
}
if (this.services.ContainsKey(type))
{
return false;
}
if (!type.IsAssignableFrom(service.GetType()))
{
return false;
}
try
{
this.services.Add(type, service);
}
catch
{
return false;
}
return true;
}
推荐阅读
- dataweave - Mule 4:根据 Mule 4 中有效负载的数据类型检查和应用条件的最安全方法是什么?
- python-3.x - 有什么方法可以知道运行冻结的应用程序时发生了什么错误 - cx_Freeze
- laravel - PHP致命错误:当我将其上传到cpanel时找不到接口'JsonSerializable'
- javascript - y√(x) 的 js 数学函数?
- mysql - 如何从节点js中的mysql db中找出给定时间的时区
- python - 必须使用 Subscription 实例作为第一个参数调用未绑定方法 delete() (Stripe API)
- flutter - 如何在 onComplete 函数后更改小部件本身的参数
- python - 使用 For Each 循环从列表中删除项目的 Python 逻辑错误
- git - 文件的 Git 权限
- asp.net - Asp.net 核心 web api 应用程序,startup.cs 文件中发生错误