我应该返回什么结果?

Adm*_*and 9 .net c#

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

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

return new List<String>();
Run Code Online (Sandbox Code Playgroud)

要么

return null;
Run Code Online (Sandbox Code Playgroud)

例:

var resultColl=FindNames(...);
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Rah*_*thi 15

你应该总是返回空列表.请参阅收集指南.

不要从集合属性或返回集合的方法返回空值.返回一个空集合或一个空数组.


npi*_*nti 5

我会回来Enumerable.Empty<string>(),或者如果你的方法应该返回一个List,那就行了return new List<string>().如果你有很多需要返回空列表的情况,你可以创建一个静态列表,每次返回一次,这将阻止每次都必须创建新的空列表,如下所述@YuvalItzchakov.

一个空的集合比null它更好,在我看来会导致更清晰的代码.


小智 5

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

foreach (string name in FindNames(...))
{
   Display(name);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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