c#为函数添加参数

本文关键字:参数 添加 函数 | 更新日期: 2023-09-27 18:15:08

我有这些函数:

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添加参数?

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

我有许多函数,具有不同的签名,查询不同的db表。有些查询的结果集太大了,所以我想使用(MySQL)的Limit函数:

'some mysql query' limit offset,batchsize

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

编辑:

我不明白为什么投反对票。

我有多个不同签名的函数来查询我的数据库。

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

因为结果集太大,我想要得到小块的结果集,然后将它们全部连接到完整的结果集。

例如:原始结果集大小为500K,这会导致超时。

我想要得到大小为1K, 500倍的结果集。

这就是为什么我需要在Wrapper中控制偏移量,以便在每次迭代时,我可以将偏移量作为参数发送给原始函数,该偏移量在每次迭代后递增。

c#为函数添加参数

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

public List<int> Wrapper(Func<int, List<int>> queryFunc)
{
    var offset = 5;
    return queryFunc(offset);
}

然后你必须通过传递lambda来使用它,在那里你用所需的参数调用其他函数,并传递lambda参数作为offset

var result1 = Wrapper(o => GetInts(someParam, o));
var result2 = Wrapper(o => GetMoreInts(someParam, anotherParam, o));

虽然我不确定这到底有多有用。如果offset是全局的,你可能想要注入它,而不是通过将它作为它们所属类的字段传递给这些函数。

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

 public List<int> Wrapper(int x, int y, Func<int,int,List<int>> queryFunc)
    {            
        return queryFunc(x, y);            
    }

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

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