C# C如何将“any”函数作为参数传递给另一个函数
我有5个数据函数,它们都返回相同类型的对象列表 现在我必须在一个WCF中发布它们,在这个WCF中,我必须用大约50行的各种错误处理代码来包围被调用的代码 所以我想:因为代码51行除了获取数据的一行之外都是相同的,所以只需创建一个函数,其中包含所有错误处理,传递函数以获取数据作为该函数的参数 所以我有这些功能:C# C如何将“any”函数作为参数传递给另一个函数,c#,C#,我有5个数据函数,它们都返回相同类型的对象列表 现在我必须在一个WCF中发布它们,在这个WCF中,我必须用大约50行的各种错误处理代码来包围被调用的代码 所以我想:因为代码51行除了获取数据的一行之外都是相同的,所以只需创建一个函数,其中包含所有错误处理,传递函数以获取数据作为该函数的参数 所以我有这些功能: GetAllSources() : List<Source> GetAllSourcesByTaskId(int taskId) : List<Source> Ge
GetAllSources() : List<Source>
GetAllSourcesByTaskId(int taskId) : List<Source>
GetAllSourcesByTaskIdPersonId(int taskId, int personId) : List<Source>
GetAllSourcesByDate(DateTime startDate, DateTime endDate): List<Source>
我希望能够将它们作为参数传递给函数
我应该如何声明被调用的函数
ps
我读过这个
但是它使用了一个Action对象,据我所知,它不能返回任何东西,我想返回一个列表你可以传递一个可以接受许多输入参数的函数,返回一个值:
Func<T1, T2, TResult>
您可以传递一个可接受多个输入参数并返回一个值的:
Func<T1, T2, TResult>
这应该起作用:
public List<Source> GetList(Func<List<Source>> getListMethod) {
return getListMethod();
}
List<Source> WithErrorHandling(Func<List<Source>> func)
{
...
var ret = func();
...
return ret;
}
这应该起作用:
public List<Source> GetList(Func<List<Source>> getListMethod) {
return getListMethod();
}
List<Source> WithErrorHandling(Func<List<Source>> func)
{
...
var ret = func();
...
return ret;
}
您是否可以将列表作为参数传递到方法中,可能会更整洁一些?您是否可以将列表作为参数传递到方法中,可能会更整洁一些?好吧,您没有提到这些函数中的代码,但是如果您在内部使用linq,那么您的方法肯定不是最好的方法。 您应该使用如下内容:
IQueriable<SomeType> GetAllSources()
{
return (from source in sources select ...);
}
IQueriable<SomeType> GetAllSourcesByTaskId(int taskId)
{
return (GetAllSources()).Where(source => source.TaskId == taskId);
}
好吧,你没有提到这些函数中的代码,但是如果你在函数中使用linq,那么你的方法肯定不是最好的。 您应该使用如下内容:
IQueriable<SomeType> GetAllSources()
{
return (from source in sources select ...);
}
IQueriable<SomeType> GetAllSourcesByTaskId(int taskId)
{
return (GetAllSources()).Where(source => source.TaskId == taskId);
}
使用Func代替操作。给定的函数都采用不同的参数,您打算如何提供正确的参数?@Roger我试过了,但无法使其工作。在我看来,一个func只有一个签名,如果我错了,请纠正我的错误,因此当我为GetAllSources声明一个func时,我无法传递GetAllSourcesByTaskIdint taskId?@GregL:我不知道,但我想我可以这样做:List=GetDataFromGenericErrorHandlingFunctionDataService.GetAllSourcesByTaskId6@Michel您的示例只是调用Dataservice.GetAllSourcesByTaskKid函数,并将返回值传递给GetDataFromGenericErrorHandlingFunction方法。这很容易。我遗漏了什么吗?用Func代替动作。给定的函数都有不同的参数,你打算如何提供正确的参数?@Roger我试过了,但没能让它工作。在我看来,一个func只有一个签名,如果我错了,请纠正我的错误,因此当我为GetAllSources声明一个func时,我无法传递GetAllSourcesByTaskIdint taskId?@GregL:我不知道,但我想我可以这样做:List=GetDataFromGenericErrorHandlingFunctionDataService.GetAllSourcesByTaskId6@Michel您的示例只是调用Dataservice.GetAllSourcesByTaskKid函数,并将返回值传递给GetDataFromGenericErrorHandlingFunction方法。这很容易。我错过什么了吗?太好了!我没有做的是:=>{GetAllSourcesByTaskIdtaskId;};相反,我这样做了:GetAllSourcesByTaskIdtaskId;。当你有一个没有参数的函数时,这是可行的,所以这可以作为参数使用GetAllSources,但正如我现在知道的,当你传入一个带参数的函数时就不行了。太棒了!我没有做的是:=>{GetAllSourcesByTaskIdtaskId;};相反,我这样做了:GetAllSourcesByTaskIdtaskId;。当你有一个不带参数的函数时,这是可行的,所以这可以作为参数使用GetAllSources,但正如我现在知道的,当你传入一个带参数的函数时就不行了。