Method with Predicate as Parameter
This is a general question, but here is the specific case I'm looking for a solution to:
I have a Dictionary<int, List<string>>
I want to apply various predicates to. I want one method that can take care of multiple LINQ queries such as these:
from x in Dictionary
where x.Value.Contains("Test")
select x.Key
from x in Dictionary
where x.Value.Contains("Test2")
select x.Key
So I'm looking for a method like so:
public int GetResult(**WhatGoesHere** filter)
{
return from x in Dictionary.Where(filter)
开发者_Python百科 select x.Key;
}
To be used like so:
int result;
result = GetResult(x => x.Value.Contains("Test"));
result = GetResult(x => x.Value.Contains("Test2"));
What is the proper syntax for WhatGoesHere?
You can use Func<KeyValuePair<int, List<string>>, bool>
:
public int GetResult(Func<KeyValuePair<int, List<string>>, bool> filter)
{
return (from x in Dictionary
where filter(x)
select x.Key).FirstOrDefault();
}
Or alternatively: Predicate<KeyValuePair<int, List<string>>>
. I think Func
which was introduced in .NET 3.5 is preferred these days.
You are using x
to mean two different things in your final example and this will give a compile error. Try changing one of the x
s to something else:
x = GetResult(y => y.Value.Contains("Test1"));
精彩评论