我需要能够基于密钥过滤集合中的一组委托。每个密钥都有一个或多个与之关联的代理。看起来Lookup<TKey, TElement>
可以在这里提供帮助,但我不确定是否可以创建一个TKey
不是来自TElement
属性的地方(在我的情况下,TElement
将是委托类型,并且不会知道有关标识符的任何信息。)
更新
例如,如果我使用了Dictionary
,我可以索引并过滤我的代理列表,如下例所示:
private delegate MyMethod MethodName(string key);
IDictionary<string, MyMethod> methodList = new Dictionary<string, MyMethod>();
methodList.Add("Key1", Method1);
methodList.Add("Key1", Method2);
methodList.Add("Key2", Method3);
methodList.Add("Key3", Method4);
methodList.Add("Key3", Method5);
var someMethods = methodlist["Key3"];
但是,这会失败,因为Dictionary
需要一个唯一的密钥,而在我的方案中,每个密钥有多个条目。 Lookup
支持每个键有多个条目,但无法使用Add
方法对其进行实例化。我正在寻找一种实例化Lookup的方法,以便使用任意键索引委托列表。
有人可以提出这样做的方法吗?
答案 0 :(得分:0)
I found a solution to this by wrapping the delegate in a class that also incorporates the key:
private delegate MyMethod DoStuff();
private class MethodWrapper
{
public MethodWrapper(string key, MyMethod method)
{
Key = key;
Method = method;
}
public string Key { get; private set; }
public MyMethod Method { get; private set; }
}
Then you can produce a lookup like this:
private static IEnumerable<GetChart> GetMethodList(string key)
{
IEnumerable<MethodWrapper> methods = new List<MethodWrapper>()
{
new MethodWrapper("Key1", Method1),
new MethodWrapper("Key2", Method2),
new MethodWrapper("Key2", Method3)
};
ILookup<string, GetChart> lookup = methods.ToLookup(m => m.Key, m => m.Method);
return lookup[key];
}