我应该返回什么结果?

时间:2015-09-25 12:13:39

标签: c# .net

我写简单的库,返回名称列表。

但是,如果我找不到任何东西,我应该回报什么?

return new List<String>();

return null;

示例:

var resultColl=FindNames(...);

此代码可以从其他组件使用,我不想破坏它。 如果我返回null-我认为这是检查它的正确方法。但是,我可能应该返回空列表吗?

谢谢。

8 个答案:

答案 0 :(得分:15)

您应该始终返回空列表。请参阅Guidelines for Collections

  

不要从集合属性或方法返回空值   返回集合。返回一个空集合或一个空数组   代替。

答案 1 :(得分:5)

我将返回Enumerable.Empty<string>(),或者如果您的方法应该返回一个List,请执行return new List<string>()。如果你有很多需要返回空列表的情况,你可以创建一个静态列表,每次都返回,这将阻止每次都必须创建新的空列表,如{{1}所指出的那样。 }。

空集合优于@YuvalItzchakov,因为在我看来,它会带来更清晰的代码。

答案 2 :(得分:5)

返回空列表对于您的函数用户来说更方便:

foreach (string name in FindNames(...))
{
   Display(name);
}

返回null会强制您的调用者编写额外的代码:

  • 测试null,
  • 一个额外的局部变量(以避免必须两次调用你的函数)

    List<string> names = FindNames(...);
    
    if (names != null)
    {
       foreach (string name in names)
       {
          Display(name);
       }
    }
    

所以返回一个空列表更好。

答案 3 :(得分:3)

调用代码可能希望迭代列表,或者使用List执行某些操作。通过传回一个空List,调用代码应该可以正常工作。如果你返回null,那么调用代码必须确保它们首先有一个列表。

这可能仅仅是一个偏好问题,但是返回一个空列表会得到我的投票......你将返回合同说它会返回的东西。

答案 4 :(得分:2)

从设计角度来看,返回空集合更好,因为客户端代码不需要执行空检查。请参阅Null Object pattern

答案 5 :(得分:1)

这取决于代码的语义。

如果没有结果是可接受的结果,那么你应该返回一个空集合。

如果没有结果是错误条件,则返回null。

答案 6 :(得分:1)

我建议你在没有任何回报的时候保持一致。通过这种方式,您始终可以知道您所要求的任何内容都可以获得相同类型的响应。比如知道你总是会返回一个空集或一个空字符串或0等。

您对自己拥有的其他图书馆资料有何看法?

答案 7 :(得分:0)

更详细的答案是Tuple<bool, List<string>>。这是一个明确的解决方案,可以对其进行修改以包含有关搜索的其他详细信息:

var thereAreResults = foundList.Count > 0;
return new Tuple<bool, List<String>>(thereAreResults, foundList);