【发布时间】:2012-03-31 15:13:31
【问题描述】:
以前我使用IEnumerable<T> 类型,如果我将集合作为方法的参数传递。
但最近,我遇到了以类似方式创建的IEnumerable<T> 类型集合的问题:
var peoples = names.Select(name => new People(name));
在这种情况下,总是,如果我使用 peoples 集合(例如,foreach),它会创建 People 类的新实例,并且很容易导致错误。
所以我想问一下使用IEnumerable <T>类型参数是否正确。我认为它可能会导致问题(参见上面的示例),不应使用这种类型。您推荐哪些替代方案(ICollection<T>、IList<T> 等)以及何时使用哪种替代方案?
或者你认为这是一个愚蠢的问题,因为在Select方法中创建对象只使用了一个傻瓜?
当然,我知道我可以使用ToArray() 或ToList() 从而解决问题。但是其他人使用这种方法,就无法知道了。我想知道如何通过选择正确的类型参数来防止这种情况。当我只想“枚举”对象时,列表或数组对我来说太具体了。
【问题讨论】:
-
使用
new People(name)会出现什么样的错误? -
Wiktor Zychla:问题:当我使用 peoples 时,它总是会创建 People 类的新实例。
标签: c# collections parameters ienumerable