我使用的语言是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接口的类型传递的最佳方式感到有点困惑。以上两者之间的最佳方法是什么?还有更好的办法吗?
提前感谢您的帮助。
答案 0 :(得分:9)
这取决于您在方法中使用参数的方式。如果你要枚举它,那么传递IEnumerable<T>
是一个不错的选择。如果您要添加/删除项目,则应该是IList<T>
,ICollection<T>
或List<T>
类型。
尽量不要给你的方法更多知识,然后它需要履行它的职责。但也不要给它少知识,因为它无法履行其职责:)
还有一个示例 - 如果您需要方法中的项目数,是否应该通过IList<T>
或IEnumerable<T>
?使用列表,您可以使用Count
属性。使用可枚举的Count()
扩展方法。正确的答案是 - 通过项目计数,如果你只需要计数。