Как мы пишем функцию более высокого порядка в этом примере? - PullRequest
0 голосов
/ 05 декабря 2018

Я просто пытаюсь передать лямбда-функцию, которая приводит к строке, которая обычно заполняет специальный вид списка поиска.Я пытаюсь переписать некоторый код, используя функции более высокого порядка.Проблема в том, что метод Add не похож на функцию keySelector.Вот код, как мне заставить его скомпилировать, пожалуйста:

public static KeyedLookupList<TSource> Slug<TSource>(this List<TSource> items, 
                                                     Func<TSource, string> keySelector)
{
    var keyedLookupList = new KeyedLookupList<TSource>();

    foreach (var item in items)
    {
        keyedLookupList.Add(keySelector, item);
    }

    return keyedLookupList;
}

Вот метод Add:

public override void Add(string key, TValue value)
{
    base.Add(new KeyValuePair<string, TValue>(key, value));
}

Компилятор выдает следующую ошибку:

Error   CS1503  Argument 1: cannot convert from 'System.Func<TSource, string>' to 'string'

Решено благодаря @peeyush singh:

public static KeyedLookupList<TSource> Slug<TSource>(this List<TSource> items,
        Func<TSource, string> keySelector)
    {
        var keyedLookupList = new KeyedLookupList<TSource>();

        foreach (var item in items)
        {
            keyedLookupList.Add(keySelector(item), item);
        }

        return keyedLookupList;
    }

1 Ответ

0 голосов
/ 05 декабря 2018

Вместо передачи функции вам нужно передать оцененную функцию, например,

keyedLookupList.Add(keySelector(item), item);
...