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