如何将函数名称及其参数作为参数传递?

时间:2015-12-07 22:36:41

标签: c# lambda

我正在尝试使用泛型类

编写类似的东西
MyGenericClass<IMyType> myGenericClass = new MyGenericClass<IMyType>();
myGenericClass.SetMethod( s=> s.MethodOfMyType(), parameter1, parameter2)

具有

interface IMyType
{
     int MethodOfMyType(string parameter1, string parameter2);
}

我对Lambda表达不太熟悉。这在C#中是否可行?

编辑:

我正在为MyGenericClass添加伪代码,以便更清楚地说明这一点:

class MyGenericClass<T>
   {
        public SetMethod(....Here I don't know what kind of parameters i should use)
        {
        }
   }

1 个答案:

答案 0 :(得分:0)

你可以记住这样的事吗?

myGenericClass.SetMethod( (s,p1,p2) => s.MethodOfMyType(parameter1, parameter2), p1, p2);

我的最终代码:

class MyGenericClass
{
    public void SetMethod<T>(Func<T, string, string, int> method)
        where T : IMyType
    {
    }
}

MyGenericClass myGenericClass = new MyGenericClass();
myGenericClass.SetMethod<IMyType>((t, s1, s2) => t.MethodOfMyType(s1, s2));

如果您想稍后传递参数,可以将它们添加到SetMethod。或者如果你想拥有&#34; AllInOne&#34;参数你可以使用partial function application

var str1 = "MyString1";
var str2 = "MyString2";
Func<string, string, IMyType, int> sourceMethod = (s1, s2, t) => t.MethodOfMyType(s1, s2);
Func<IMyType, int> partialMethod = (t) => t.MethodOfMyType(str1, str2);