方法签名传递参数为IEnumerable <t>或List <t> </t> </t>

时间:2013-12-02 14:17:04

标签: c#

我使用的语言是C#。

正如我所读到的,如果一个对象的方法返回一个像列表这样的可枚举类型,最好将它的签名声明如下:

private IEnumerable<int> listOfNumbers()
{
   // here goes the code of the method
}

而不是

private List<int> listOfNumbers()
{
  //  here goes the code of the method
}

现在让我们想要作为参数传递A类型的对象列表。

当我们写

private IEnumerable<int> listOfNumbers(List<A> list)
{
  // here goes the code of the method
}

更容易访问列表的元素并使用它们进行任何计算而不是编写

private IEnumerable<int> listOfNumbers(IEnumerable<A> list)
{
    // here goes the code of the method.
}

在第二种情况下,为了访问实现接口IEnumerable的列表元素,我们应该将列表转换为List,在方法的代码中。

我对作为参数传递实现IEnumerable接口的类型传递的最佳方式感到有点困惑。以上两者之间的最佳方法是什么?还有更好的办法吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

这取决于您在方法中使用参数的方式。如果你要枚举它,那么传递IEnumerable<T>是一个不错的选择。如果您要添加/删除项目,则应该是IList<T>ICollection<T>List<T>类型。

尽量不要给你的方法更多知识,然后它需要履行它的职责。但也不要给它知识,因为它无法履行其职责:)

还有一个示例 - 如果您需要方法中的项目数,是否应该通过IList<T>IEnumerable<T>?使用列表,您可以使用Count属性。使用可枚举的Count()扩展方法。正确的答案是 - 通过项目计数,如果你只需要计数。