C# 如何从对象中的方法创建泛型委托

C# 如何从对象中的方法创建泛型委托,c#,delegates,func,C#,Delegates,Func,我正在尝试创建一个通用委托,如下所示: Func<string, string, IEnumerable<MyPOCO>> del = WCFServiceInstance.GetLabs(SessionStateService.Var1,SessionStateService.Var2)); Func del= GetLabs(SessionStateService.Var1,SessionStateService.Var2)); 但似乎是因为GetLabs位于

我正在尝试创建一个通用委托,如下所示:

Func<string, string, IEnumerable<MyPOCO>> del  = 
WCFServiceInstance.GetLabs(SessionStateService.Var1,SessionStateService.Var2));
Func del=
GetLabs(SessionStateService.Var1,SessionStateService.Var2));
但似乎是因为GetLabs位于WCFServiceInstance中,Func委托认为我传递的是IEnumerable,而不是

Func<string, string, IEnumerable<MyPOCO>> 
Func
这正是我想要通过的。

我想你想要:

Func<string, string, IEnumerable<MyPOCO>> del = WCFServiceInstance.GetLabs;
Func del=WCFServiceInstance.GetLabs;
也就是说,假设WCFServiceInstance.GetLabs具有以下签名:

IEnumerable<MyPOCO> WCFServiceInstance.GetLabs(string, string)
IEnumerable WCFServiceInstance.GetLabs(字符串,字符串)
我想您需要:

Func<string, string, IEnumerable<MyPOCO>> del = WCFServiceInstance.GetLabs;
Func del=WCFServiceInstance.GetLabs;
也就是说,假设WCFServiceInstance.GetLabs具有以下签名:

IEnumerable<MyPOCO> WCFServiceInstance.GetLabs(string, string)
IEnumerable WCFServiceInstance.GetLabs(字符串,字符串)
我想您需要:

Func<string, string, IEnumerable<MyPOCO>> del = WCFServiceInstance.GetLabs;
Func del=WCFServiceInstance.GetLabs;
也就是说,假设WCFServiceInstance.GetLabs具有以下签名:

IEnumerable<MyPOCO> WCFServiceInstance.GetLabs(string, string)
IEnumerable WCFServiceInstance.GetLabs(字符串,字符串)
我想您需要:

Func<string, string, IEnumerable<MyPOCO>> del = WCFServiceInstance.GetLabs;
Func del=WCFServiceInstance.GetLabs;
也就是说,假设WCFServiceInstance.GetLabs具有以下签名:

IEnumerable<MyPOCO> WCFServiceInstance.GetLabs(string, string)
IEnumerable WCFServiceInstance.GetLabs(字符串,字符串)

我想您需要一个lambda表达式来部分应用函数,修复前两个参数:

Func<IEnumerable<MyPOCO>> del  =
  () => WCFServiceInstance.GetLabs(
    SessionStateService.Var1,
    SessionStateService.Var2);
Func del=
()=>WCFServiceInstance.GetLabs(
SessionStateService.Var1,
SessionStateService.Var2);

调用as
del()

我想您需要一个lambda表达式来部分应用函数,修复前两个参数:

Func<IEnumerable<MyPOCO>> del  =
  () => WCFServiceInstance.GetLabs(
    SessionStateService.Var1,
    SessionStateService.Var2);
Func del=
()=>WCFServiceInstance.GetLabs(
SessionStateService.Var1,
SessionStateService.Var2);

调用as
del()

我想您需要一个lambda表达式来部分应用函数,修复前两个参数:

Func<IEnumerable<MyPOCO>> del  =
  () => WCFServiceInstance.GetLabs(
    SessionStateService.Var1,
    SessionStateService.Var2);
Func del=
()=>WCFServiceInstance.GetLabs(
SessionStateService.Var1,
SessionStateService.Var2);

调用as
del()

我想您需要一个lambda表达式来部分应用函数,修复前两个参数:

Func<IEnumerable<MyPOCO>> del  =
  () => WCFServiceInstance.GetLabs(
    SessionStateService.Var1,
    SessionStateService.Var2);
Func del=
()=>WCFServiceInstance.GetLabs(
SessionStateService.Var1,
SessionStateService.Var2);

调用as
del()

您的方法还有其他问题。 这两个参数应该始终是
SessionStateService.Var1
SessionStateService.Var2
?或者这些是代表的论点

如果希望它们成为代理的参数:

Func<string, string, IEnumerable<MyPOCO>> del  =
   WCFServiceInstance.GetLabs;

del(SessionStateService.Var1, SessionStateService.Var2);

你的方法还有其他问题。 这两个参数应该始终是
SessionStateService.Var1
SessionStateService.Var2
?或者这些是代表的论点

如果希望它们成为代理的参数:

Func<string, string, IEnumerable<MyPOCO>> del  =
   WCFServiceInstance.GetLabs;

del(SessionStateService.Var1, SessionStateService.Var2);

你的方法还有其他问题。 这两个参数应该始终是
SessionStateService.Var1
SessionStateService.Var2
?或者这些是代表的论点

如果希望它们成为代理的参数:

Func<string, string, IEnumerable<MyPOCO>> del  =
   WCFServiceInstance.GetLabs;

del(SessionStateService.Var1, SessionStateService.Var2);

你的方法还有其他问题。 这两个参数应该始终是
SessionStateService.Var1
SessionStateService.Var2
?或者这些是代表的论点

如果希望它们成为代理的参数:

Func<string, string, IEnumerable<MyPOCO>> del  =
   WCFServiceInstance.GetLabs;

del(SessionStateService.Var1, SessionStateService.Var2);


GetLabs是否返回函数?您想如何调用
del
(使用哪些参数)?GetLabs的方法签名是什么?否它返回IEnumerableMethod GetLabs的签名是公共IEnumerable GetLabs(字符串var1,字符串var2){…}GetLabs是否返回函数?您想如何调用
del
(使用哪些参数)?GetLabs的方法签名是什么?否它返回IEnumerableMethod GetLabs的签名是公共IEnumerable GetLabs(字符串var1,字符串var2){…}GetLabs是否返回函数?您想如何调用
del
(使用哪些参数)?GetLabs的方法签名是什么?否它返回IEnumerableMethod GetLabs的签名是公共IEnumerable GetLabs(字符串var1,字符串var2){…}GetLabs是否返回函数?您想如何调用
del
(使用哪些参数)?GetLabs的方法签名是什么?否它返回IEnumerableMethod GetLabs的签名是公共IEnumerable GetLabs(字符串var1,字符串var2){…}注意
var1
var2
包含当前值,因此,如果您更新了它们的值,您将在函数调用中使用更新后的值。如果要修复它们,请首先将它们存储在局部变量中(闭包比较复杂)。请注意,
Var1
Var2
包含当前值,因此如果更新它们的值,则将在函数调用中使用更新的值。如果要修复它们,请首先将它们存储在局部变量中(闭包比较复杂)。请注意,
Var1
Var2
包含当前值,因此如果更新它们的值,则将在函数调用中使用更新的值。如果要修复它们,请首先将它们存储在局部变量中(闭包比较复杂)。请注意,
Var1
Var2
包含当前值,因此如果更新它们的值,则将在函数调用中使用更新的值。如果要修复它们,请先将它们存储在局部变量中(闭包比较复杂)。如果不希望在调用时计算
Var1
Var2
,请使用
string Var1=SessionStateService.Var1,Var2=SessionStateService.Var2;var del=()=>WCFServiceInstance.GetLabs(var1,var2)是的,正确我对如何将参数输入到委托定义中感到困惑我还可以将带有2个参数的函数传递到另一个类似这样的对象中吗?@BarryMcDermid你是说,创建一个委托,它调用met