Фильтрация ICollection
Этот код не работает, но:
public virtual ICollection<SomeItem> items { get { return (ICollection<SomeItem>)items.Where(e => e.isVisible == true); } set { ;} }
Я хотел бы сделать что-то для этого. Таким образом, чтобы получить ICollection, отфильтрованный по свойству элементов коллекции.
Конечно, я мог бы пройтись по элементам и найти нужные, поместить их в новую коллекцию и вернуться с этим, но есть ли более хорошее решение?
2 ответа
Решение
Возможно, вы ищете метод расширения?
Методы расширения позволяют вам "добавлять" методы к существующим типам, не создавая новый производный тип, не перекомпилируя или иным образом не изменяя исходный тип.
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
}
}