在 C# 中,我如何创建一个扩展方法,该方法采用带有通用参数 Func<T, TResult> 作为参数的 lambda。

In C# how do I create an extension method that takes a lambda with generic parameters, Func<T, TResult> as a parameter.

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

问题是您正在将 "s" - 一个字符串传递到声明为接受类型 "T" 的函数中。

更改 func 以接收字符串而不是 T,并且 return 接收字符串以使此代码可以处理字符串。

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

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

作为 ,你已经知道参数类型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);
}