从失败的方法返回什么以及何时投掷?

LDo*_*ala 7 .net c#

我最近一直在考虑从方法中返回的东西,我注意到当方法失败时我会返回4种不同的东西.

困扰我的是,我的代码在这方面不是很有用,所以我想询问你的"最佳实践".

因此,让我们设想一个采用Foo并返回Bar列表的方法:

public IList<Bar> Method(Foo something);
Run Code Online (Sandbox Code Playgroud)

或者保持更一般:

public IBar Method(IFoo something);
Run Code Online (Sandbox Code Playgroud)

问题是你在什么样的失败中返回什么.选项将是:

  1. 空返回类型如:new List; 或:new EmptyBar();
  2. 空值
  3. 抛出一个例外
  4. 表示失败的特殊列表值:new List {new FailureBar()}

我真的很讨厌选项4,所以我大部分都倾向于听你何时使用其他3个选项以及为什么

Rob*_*ett 13

我会根据失败的性质在空列表和异常之间进行选择.

例如

如果您的数据库连接失败 - 异常.

如果您的查询没有返回结果 - 空列表.

  • 这就是我说失败的原因. (2认同)

Raz*_*zie 6

这取决于你所说的“失败”是什么意思。

如果发生了意外事件,那么我会抛出异常。当参数不正确时可能会出现参数异常,当您无法从文件中读取时可能会出现 IOException 等等。

如果“失败”是找不到给定参数值的项目,那么我将返回一个空列表。如果您返回一个不是集合的对象,我将返回 null。

我从不返回特殊的结果代码,例如错误时返回-1。我真的不喜欢它。人们往往会忘记代码,它们会随着时间的推移而改变,最终会得到难以维护的 if 语句来检查这些结果代码,等等。