首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#向Func添加参数

问c#向Func添加参数
EN

Stack Overflow用户
提问于 2016-10-27 11:26:30
回答 2查看 1.1K关注 0票数 0

我有以下职能:

代码语言:javascript
复制
public List<int> GetInts(int someParam)
public List<int> GetMoreInts(int someParam, int anotherParam)

我更改了这些函数的签名,以便它们将获得一个额外的可选参数:

代码语言:javascript
复制
public List<int> GetInts(int someParam, int offset = 0)
public List<int> GetMoreInts(int someParam, int anotherParam, int offset = 0)

现在,我想调用一个包装函数,它将使用附加的可选参数调用这些函数:

代码语言:javascript
复制
public List<int> Wrapper(Func<List<int>> queryFunc)
{
    var offset = 5;
    return queryFunc(offset);
}

我将这样调用包装器:

代码语言:javascript
复制
List<int> result = Wrapper(() => GetInts(0));

我怎样才能做到呢?当我不知道Func指向的函数的签名时,如何向Func添加参数?

如果我想这么做的原因是相关的:

我有许多函数,具有不同的签名,它们查询不同的db表。其中一些查询的结果集太大,因此我想使用(MySQL)限制函数:

“一些mysql查询”限制偏移量,批大小

然后将结果连接到包装器函数中。因此,我在一些函数中添加了附加参数(偏移量、批大小),我希望包装器函数将这些参数添加到Func所指向的函数中。

编辑:,我不明白否决投票的原因。

我有多个具有不同签名的函数,这些函数查询我的数据库。

问题是,在某些情况下,结果集太大,我得到一个超时异常。

因为结果集太大,所以我希望得到小块的结果集,然后将它们连接到完整的结果集中。

例如:最初的结果集大小为500 K,这将导致超时。

我想得到1K,500倍的结果集。

这就是为什么我需要从包装器内部控制偏移量,以便在每次迭代时,我都可以将偏移量(在每次迭代之后递增)作为参数发送到原始函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-27 11:30:06

您只需要创建一个Func,它接受单个int并返回List<int>。

代码语言:javascript
复制
public List<int> Wrapper(Func<int, List<int>> queryFunc)
{
    var offset = 5;
    return queryFunc(offset);
}

然后,您必须通过传入lambda使用所需的params调用其他函数,并以offset的形式传入lambdas参数。

代码语言:javascript
复制
var result1 = Wrapper(o => GetInts(someParam, o));
var result2 = Wrapper(o => GetMoreInts(someParam, anotherParam, o));

虽然我不知道这到底有多有用。如果offset是全局的,您可能希望注入它,而不是通过使它成为它们所属的类的字段而将其传递给这些函数。

票数 5
EN

Stack Overflow用户

发布于 2016-10-27 11:45:29

我认为你的包装应该是这样的:

代码语言:javascript
复制
 public List<int> Wrapper(int x, int y, Func<int,int,List<int>> queryFunc)
    {            
        return queryFunc(x, y);            
    }

这是如果您想从外部传递参数的话。另外,这是用于wrapper的public List<int> GetMoreInts(int someParam, int anotherParam, int offset = 0)

我希望我已经理解了你的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40283451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档