Rot*_*te2 4 c# delegates dictionary
我有一个字典,我想根据不同的条件进行过滤,例如
IDictionary<string, string> result = collection.Where(r => r.Value == null).ToDictionary(r => r.Key, r => r.Value);
Run Code Online (Sandbox Code Playgroud)
我想将Where子句作为参数传递给执行实际过滤的方法,例如
private static IDictionary<T1, T2> Filter<T1, T2>(Func<IDictionary<T1, T2>, IDictionary<T1, T2>> exp, IDictionary<T1, T2> col)
{
return col.Where(exp).ToDictionary<T1, T2>(r => r.Key, r => r.Value);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会编译.
我试图通过使用调用此方法
Func<IDictionary<string, string>, IDictionary<string, string>> expression = r => r.Value == null;
var result = Filter<string, string>(expression, collection);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
WhereFunc<TSource, bool>在你的情况下,想要一个Func<KeyValuePair<TKey, TValue>, bool>.
此外,您的方法的返回类型不正确.它应该使用T1而T2不是string.此外,最好为通用参数使用描述性名称.而不是T1和T2我使用相同的名称作为字典 - TKey和TValue:
private static IDictionary<TKey, TValue> Filter<TKey, TValue>(
Func<KeyValuePair<TKey, TValue>, bool> exp, IDictionary<TKey, TValue> col)
{
return col.Where(exp).ToDictionary(r => r.Key, r => r.Value);
}
Run Code Online (Sandbox Code Playgroud)