我有一个类Bookstore
,它实现了一个接口IBookstore
。通过接口搜索列表
Bookstore
具有作为私有财产的图书列表:private List<Book> AllBooks;
我不想通过接口暴露的书籍的完整列表。相反,我希望用户根据某些属性查询图书。所以,在IBookstore
我有以下几点:
public interface IBookstore
{
IList<Book> SelectedBooks;
}
public class Bookstore : IBookstore
{
private List<Book> AllBooks;
public IList<Book> SelectedBooks { get; set; }
}
我希望做的是创建一个名为SearchBooks
的方法,将搜索包含各种属性的所有条目列表AllBooks,然后设置SelectedBooks
与结果。所以,我使用的是以下几点:
Bookstore myStore = new Bookstore();
...
myStore.SearchBooks(A BUNCH OF CRITERIA);
myStore.SelectedBooks; // contains books selected by the criteria passed to SearchBooks above
为什么我想这样做:
- 我将需要访问
SelectedBooks
多次。我不想 多次运行搜索。 - 我希望SelectedBooks的列表属于
myBookstore
。此对象只创建一次并在很多地方使用,所以我希望能够在许多地方访问相同的SelectedBooks
,而无需重新构建它。将其作为当地财产存储是不可取的;即,我不想做List<Book> myBooks = myStore.SearchBooks(A BUNCH OF CRITERIA);
。我有一个很好的理由。
我的问题
鉴于Book
有很多特性,例如Title
,Author
,Date
等,什么是最简单的方法任意通过一组搜索条件SearchBooks
,以便我可以在Bookstore
私人搜索我的列表?
例如,如果我有权访问应用程序中的整个列表,我可以使用Linq。我可以传递一个Linq查询到一个方法并让查询在myBookstore
内私下执行吗?
您是否考虑过按条件缓存搜索结果?如果内存不用担心,那么只需从'SearchBooks(...)'方法返回结果即可。 – Aaron
@Aaron是的。我不想这样做。 – Emily
我不想缓存结果的原因是因为我正在编写Unity3D的代码,并且在Unity中,我可以创建一个对象的实例并使其在多个级别和多个GameObjects中保持不变。如果我在查询结果时缓存了结果,那么结果会被限定在创建它们的GameObject中,如果我想将它们来回传递给其他GameObjects,那么我必须编写控制逻辑,或者我有重新执行查询。我宁愿将结果保存在'myBookstore'中,因为我可以在任何地方访问结果,而无需做任何额外的工作。 – Emily