Метод с предикатом как параметр

Это - общий вопрос, но здесь является конкретным случаем, которого я ищу решение:

У меня есть a Dictionary<int, List<string>> Я хочу применить различные предикаты к. Я хочу один метод, который может заботиться о нескольких запросах LINQ, таких как они:

from x in Dictionary
where x.Value.Contains("Test")
select x.Key

from x in Dictionary
where x.Value.Contains("Test2")
select x.Key

Таким образом, я ищу метод как так:

public int GetResult(**WhatGoesHere** filter)
{
    return from x in Dictionary.Where(filter)
           select x.Key;
}

Использоваться как так:

int result;

result = GetResult(x => x.Value.Contains("Test"));
result = GetResult(x => x.Value.Contains("Test2"));

Каков правильный синтаксис для WhatGoesHere?

8
задан Ocelot20 3 August 2010 в 19:18
поделиться

1 ответ

Вы можете использовать Func >, bool> :

public int GetResult(Func<KeyValuePair<int, List<string>>, bool> filter)
{
    return (from x in Dictionary
            where filter(x)
            select x.Key).FirstOrDefault();
}

Или альтернативно: Predicate >> . Я думаю, что Func , представленный в .NET 3.5, в наши дни является предпочтительным .

Вы используете x для обозначения двух разных вещей в вашем последнем примере, и это приведет к ошибке компиляции. Попробуйте изменить один из x на другой:

x = GetResult(y => y.Value.Contains("Test1"));
15
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: