В C # как создать метод расширения, который принимает лямбда с общими параметрами, Funcв качестве параметра. - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь создать метод расширения, который принимает Func в качестве параметра, но я получаю ошибку.Вот что я получил:

public static class MyExtensions
{
    public static TResult ModifyString<T, TResult>(this string s, Func<T, TResult> f)
    {
        return f(s);
    }
}

в строке return f(s); я получаю сообщение об ошибке: Error CS1503 Argument 1: cannot convert from 'string' to 'T'

Как я могу указать универсальный лямбда-функционал с универсальным параметром T иуниверсальный тип возврата TResult?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Поскольку другой ответ и комментарии предполагают , вы уже знаете тип параметра T, поэтому вам нужно только указать TResult:

public static TResult ModifyString<TResult>(this string s, Func<string, TResult> f)
{
    return f(s);
}

или последовательно передать T:

public static TResult Modify<T, TResult>(this T s, Func<T, TResult> f)
{
    return f(s);
}
0 голосов
/ 18 мая 2018

Проблема в том, что вы передаете "s" - строку в функцию, которая объявлена ​​как принимающая в типе "T".

Измените функцию, чтобы она взяла строку вместо T и вернула строку, чтобы этот код работал со строками.

public static class MyExtensions
{
    public static string ModifyString(this string s, Func<string, string> f)
    {
        return f(s);
    }
}

Предполагая, что вы просто хотите получить строковый результат.

...