此代码不起作用,但是:
public virtual ICollection<SomeItem> items { get { return (ICollection<SomeItem>)items.Where(e => e.isVisible == true); } set { ;} }
我想做点什么。所以要通过集合元素的属性来过滤ICollection。
当然,我可以遍历这些元素,并获得正确的元素,将它们放入一个新的集合中然后返回,但是有更好的解决方案吗?
答案 0 :(得分:3)
也许您正在寻找的是Extension Method?
扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。
public static class ExtensionMethods
{
public static ICollection<SomeItem> OnlyVisible(this ICollection<SomeItem) items) {
return items.Where(e => e.isVisible).ToList();
}
}
请注意,Where
会返回IEnumerable
,您无法修改,因此我会调用ToList()
,它基本上会执行您上一句话中的所有操作。
然后你会像这样使用它:
void Foo(ICollection<SomeItem> items) {
foreach (var i in items.OnlyVisible()) {
// Use i
}
}
答案 1 :(得分:1)
尝试:
items.Where(e => e.isVisible == true).ToList()