你已经提到你有自己的收藏,可能来自 List 对吧?然后您需要创建自己的查找方法:
public class MyList<T> : System.Collections.Generic.List<T>
{
public IEnumerable<T> MyFind(Predicate<T> match)
{
return this.Where(x => x.CanSeeThis).ToList().Find(match);
}
}
不幸的是,这是必需的,因为您不能直接覆盖 List 上的 Find 方法。但是,您可以使用“new”关键字来指定如果您有对 MyList 实例的引用,它将使用 find 的实现,如下所示:
public new IEnumerable<T> Find(Predicate<T> match)
{
return this.Where(x => x.CanSeeThis).ToList().Find(match);
}
但是,上面的示例将产生:
MyCollection<int> collection = new ...
collection.Find(myPredicate); // <= Will use YOUR Find-method
List<int> baseTypeCollection = collection; // The above instantiated
baseTypeCollection.Find(myPredicate); // Will use List<T>.Find!
所以最好是你自己的方法。