开发者

Method with Predicate as Parameter

开发者 https://www.devze.com 2023-01-10 14:48 出处:网络
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 t

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 xs to something else:

x = GetResult(y => y.Value.Contains("Test1"));
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号