繁体   English   中英

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

[英]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和泛型返回类型TResult指定泛型lambda Func?

问题是您要在函数中传递“ s”(一个声明为“ T”类型的字符串)。

更改func以使用字符串而不是T,然后返回字符串以使此代码可用于字符串。

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM