C#-当传入带有参数的函数时,泛型类型函数正试图将结果分配给System.Func(指定类型)



我使用的类的方法如下:

public static T Get<T>(string key, Func<T> method)
    {
        //do stuff
        var obj = method.Invoke();
        return (T)obj
    }

如果它工作得很好,我这样称呼它:

var x = Get<string>("mykey", test);

Where test是一个没有参数并返回字符串的函数。然而,一旦测试有了参数,情况就会发生变化。如果我尝试:

var x = Get<string>("mykey", test(myparam));

我得到错误"参数类型"String"不可分配给参数类型"System.Func<string>".

我知道添加(myparam)是个问题,但我不确定该如何修复。问题是库函数的编写方式,还是我试图传递参数的方式?

var x = Get<string>("mykey", () => test(myparam));

您可以像以下示例代码中那样调用它:

Get("mykey", () => test(myparam))

    public static T Get<T>(string key, Func<T> method)
    {
        //do stuff
        var obj = method.Invoke();
        return (T)obj;
    }
    void Xyz()
    {
        int myparam = 0;
        var x = Get("mykey", () => test(myparam)); // <string> is not needed
    }
    double test(int i)
    {
        return 0.0;
    }

您需要通过传递一个lambda表达式来获取参数,该表达式不接受任何参数,并使用来自其他地方的参数调用您的函数:

var x = Get<string>("mykey", () => test(myparam));

这就是传递参数的方式。test(myparam)的类型为String,您需要传递一个函数,该函数返回String。使用lambda表达式,您可以毫不费力地完成一个:

var x = Get<string>("mykey", () => test(myparam));

lambda表达式() => foo创建一个函数,该函数在被调用时执行并返回foo

您需要更改Func定义来定义输入参数,因此:

Func<T,T1,T2,T3> method

最新更新