【发布时间】:2016-10-27 11:26:30
【问题描述】:
我有这些功能:
public List<int> GetInts(int someParam)
public List<int> GetMoreInts(int someParam, int anotherParam)
我更改了这些函数的签名,以便它们获得额外的可选参数:
public List<int> GetInts(int someParam, int offset = 0)
public List<int> GetMoreInts(int someParam, int anotherParam, int offset = 0)
现在,我想调用一个包装函数,它将使用附加的可选参数调用这些函数:
public List<int> Wrapper(Func<List<int>> queryFunc)
{
var offset = 5;
return queryFunc(offset);
}
我会这样调用包装器:
List<int> result = Wrapper(() => GetInts(0));
我怎样才能完成它?当我不知道 Func 指向的函数的签名时,如何向 Func 添加参数?
如果我想这样做的原因是相关的:
我有许多函数,具有不同的签名,可以查询不同的数据库表。 其中一些查询的结果集太大,所以我想使用(MySQL)限制函数:
'some mysql query'limit offset,batchsize
然后在包装函数处连接结果。 所以我在一些函数中添加了额外的参数(offset,batchsize),并且我希望包装函数将这些参数添加到Func指向的函数中。
编辑: 我不明白投反对票的原因。
我有多个具有不同签名的函数来查询我的数据库。
问题是在某些情况下,结果集太大,我得到一个超时异常。
由于结果集太大,我想得到一小块结果集,然后将它们全部连接成完整的结果集。
例如:原始结果集大小为 500K 导致超时。
我想获得大小为 1K、500 次的结果集。
这就是为什么我需要在 Wrapper 中控制偏移量,以便在每次迭代时,我可以将每次迭代后递增的偏移量作为参数发送给原始函数。
【问题讨论】:
-
您根本不传递
Func<List<int>>,而是传递Func<List<int>, int> -
某事like this?
-
我感觉你在做那种“你的团队会讨厌第 2 卷的编程技巧”。
-
@Felype 我编辑了这个问题,试图更好地解释它。我认为我的设计没有问题,但很想听听建议