What result i should return?
我写了一个简单的图书馆,上面有名字的清单。
但是,如果我找不到任何东西,我应该返回什么?
1 |
或
1 | return null; |
例子:
1 | var resultColl=FindNames(...); |
此代码可以从其他组件中使用,我不想损坏它。如果我返回空值-我认为这是检查它的正确方法。但是,我可以退回空名单吗?
谢谢您。
您应该始终返回空列表。参见收集指南。
DO NOT return null values from collection properties or from methods
returning collections. Return an empty collection or an empty array
instead.
返回空列表对您的函数的用户更方便:
1 2 3 4 | foreach (string name in FindNames(...)) { Display(name); } |
返回空值将强制调用方编写额外代码:
- 空测试,以及
一个额外的局部变量(为了避免两次调用函数)
1
2
3
4
5
6
7
8
9List<string> names = FindNames(...);
if (names != null)
{
foreach (string name in names)
{
Display(name);
}
}
所以返回空列表更好。
我会返回
一个空的集合比
调用代码很可能想要迭代列表,或者用列表做一些事情。通过返回一个空列表,调用代码应该可以正常工作。如果您返回空值,那么调用代码必须首先确保它们有一个列表。
这可能只是一个偏好问题,但是返回一个空的列表会得到我的投票…你要把合同上说的东西还给我。
从设计的角度来看,返回空集合更好,因为客户端代码不需要执行空检查。请参见空对象模式。
我建议你在没有任何回报的时候,要始终如一。通过这种方式,您总是知道您所调用的任何内容都期望得到相同类型的响应。比如知道你总是会返回一个空的集合或者一个空的字符串或者0等等。
你对其他图书馆的藏品做了什么?
这取决于代码的语义。
如果没有结果是可接受的结果,则应返回空集合。
如果没有结果是错误条件,则返回空值。
更详细的答案是
1 2 | var thereAreResults = foundList.Count > 0; return new Tuple<bool, List<String>>(thereAreResults, foundList); |