通过方法返回列表<t>的最佳方法是什么?</t>

时间:2012-05-11 19:14:51

标签: c# .net c#-4.0 collections

假设我有一个返回String名称列表的方法。

public List<String> buildNamesList(){
   List<String> namesList = new List<String>();
   //add several names to the list
   return namesList;
}

现在,如果我有一个方法需要,nameList会以最好的方式返回它吗?

public void someMethod(){
  List<String> namesList = new List<String>();
  namesList = buildNamesList();
  //traverse namesList
}

4 个答案:

答案 0 :(得分:4)

如何返回列表实际上取决于你正在做什么。

如果您只需要内存中的整个列表,那么您的方法很好,不过我称之为:

public void someMethod(){
  List<String> namesList = buildNamesList();
}

无需将变量初始化为可立即替换的空列表。

如果列表非常大或您只需要遍历它,您可以使用yield关键字并将函数的返回类型更改为IEnumerable<string>,但您当前的设计不适合这种模式。

答案 1 :(得分:4)

如果要在buildNamesList方法中创建新列表,我只想说:

var namesList = buildNamesList(); 

答案 2 :(得分:1)

请勿将变量分配给new List<T>(),只是立即将其替换为返回值。

答案 3 :(得分:1)

您不需要对其进行两次初始化,只需执行以下操作:

public void someMethod(){
    List<String> namesList = buildNamesList();
}

虽然如果您是FxCop爱好者,严格来说,让方法返回具体类型(在此实例中为List)并不是一个好习惯,您应该返回接口({{1 }})

编辑:供参考,它的FxCop规则CA1059:)