首页 > 解决方案 > 我应该抛出异常还是返回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 吗?或者我应该抛出一个异常?

在这种情况下,我的客户将是其他开发人员。

标签: c#exception-handlingtdd

解决方案


正如非正式约定的那样,每当您使用 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;
}

推荐阅读