好的,所以我有一个关于在触发事件时可以传递的 EventArgs 的问题。我正在设计一个小型的基本搜索引擎,并有一个名为 Query 的类,其中包含一个方法 Search。调用此方法时,我想触发一个事件,该事件将传递结果以存储在各种缓存类实例(SizeBoundedCache 和 TimeBoundedCache)中。所以我认为最好的方法是使用一个事件。
委托是这样声明的->
public delegate void CacheStoreDelegate(object sender, EventArgs e);
Query 类中与此问题相关的其余代码在这里(使用 Linq)->
public event CacheStoreDelegate AddToCache;
public virtual void OnQuery (EventArgs e)
{
if(AddToCache != null)
AddToCache(this, e);
}
public Query()
{
}
public Query(string queryString, OOP5.Provided.QueryOperator op)
{
//Access and set the terms array
this.Terms = OOP5.Provided.QueryUtils.GetTermsFromString(queryString);
this.Operator = op;
}
public static IEnumerable<string> Search (this SearchCore s, IQuery q)
{
// Accept a query and return IEnumerable<string> of
// all document IDs matching that query
if (q.Operator == QueryOperator.Any)
{
var GetAnyMatch = from single_query in q.Terms
group s.Search(single_query)
by s.documents.Keys
into results
where results.Count >= 1
select results[0];
this.OnQuery(GetAnyMatch);
return GetAnyMatch;
}
if (q.Operator == QueryOperator.All)
{
var GetAllMatch = from single_query in q.Terms
group s.Search(single_query)
by s.documents.Keys
into results
where results.Count >= q.Terms.Lengthselect results[0];
this.OnQuery(GetAllMatch);
return GetAllMatch;
}
}
每当调用搜索时,都会通知所有缓存类,我还需要接收结果。
非常感谢您的帮助。另外,如果有一种我没有想到的更优雅的方式来做到这一点,请加入。干杯!