3

我正在尝试创建一个将 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和泛型返回类型的泛型 lambda Func TResult

4

2 回答 2

2

问题是您将“s”传递给函数,该字符串被声明为采用“T”类型。

更改 func 以接受字符串而不是 T,并返回一个字符串以使此代码与字符串一起使用。

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

假设您只想要一个字符串结果。

于 2018-05-18T20:35:07.033 回答
2

正如其他答案和 评论所暗示的那样,您已经知道参数类型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);
}
于 2018-05-18T21:39:11.203 回答