c#向Func添加参数

c#向Func添加参数,c#,func,C#,Func,我有以下职能: public List<int> GetInts(int someParam) public List<int> GetMoreInts(int someParam, int anotherParam) 公共列表GetInts(int-someParam) 公共列表GetMoreInts(int-someParam、int-anotherParam) 我更改了这些函数的签名,以便它们可以获得额外的可选参数: public List<int>

我有以下职能:

public List<int> GetInts(int someParam)
public List<int> GetMoreInts(int someParam, int anotherParam)
公共列表GetInts(int-someParam)
公共列表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);
}
public List GetInts(int-someParam,int-offset=0)
公共列表GetMoreInts(int-someParam、int-anotherParam、int-offset=0)
现在,我想调用一个包装函数,它将使用附加的可选参数调用这些函数:

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);
}
公共列表包装器(Func queryFunc)
{
var偏移=5;
返回查询函数(偏移量);
}
我将这样称呼包装器:

List<int> result = Wrapper(() => GetInts(0));
List result=Wrapper(()=>GetInts(0));
我怎样才能做到呢?当我不知道Func指向的函数的签名时,如何向Func添加参数

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

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

“某些mysql查询”限制偏移量,batchsize

然后在包装器函数处连接结果。 因此,我在一些函数中添加了额外的参数(offset,batchsize),我希望包装器函数将这些参数添加到Func指向的函数中

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

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

问题是,在某些情况下,结果集太大,导致超时异常

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

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

我希望得到的结果集大小为1K,500倍


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

您只需要创建一个
函数,它接受单个
int
,并返回
列表


虽然我不确定这到底有多有用。如果
偏移量是全局性的,您可能希望将其注入,而不是通过使其成为所属类的字段来将其传递给这些函数。

您只需要创建一个
Func
,它接受单个
int
,并返回
列表


虽然我不确定这到底有多有用。如果偏移量是全局的,您可能希望将其注入,而不是通过将其作为所属类的字段来传递给这些函数。

我认为您的包装器应该如下所示:

 public List<int> Wrapper(int x, int y, Func<int,int,List<int>> queryFunc)
    {            
        return queryFunc(x, y);            
    }
公共列表包装器(int x,int y,Func queryFunc)
{            
返回queryFunc(x,y);
}
这是如果要从外部传递参数。另外,这是
公共列表GetMoreInts(int-someParam,int-anotherParam,int-offset=0)的
包装器


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

我想你应该像这样:

 public List<int> Wrapper(int x, int y, Func<int,int,List<int>> queryFunc)
    {            
        return queryFunc(x, y);            
    }
公共列表包装器(int x,int y,Func queryFunc)
{            
返回queryFunc(x,y);
}
这是如果要从外部传递参数。另外,这是
公共列表GetMoreInts(int-someParam,int-anotherParam,int-offset=0)的
包装器


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

你只是没有通过一个
Func
而是通过了一个
Func
什么?我感觉你在做那种“你的团队会讨厌第二卷的编程黑客”的事情。@Felype我编辑了这个问题,试图更好地解释它。我看不出我的设计有什么问题,但我很想听听你的建议。你只是没有通过
Func
,而是通过
Func
什么?我有一种感觉,你在做那种“你的团队会讨厌第二卷的编程黑客”的事情。@Felype我编辑了这个问题,试图更好地解释它。我认为我的设计没有问题,但希望听到建议如果您不想要返回值,请尝试
Action
而不是
Func
。或者将Func的返回类型指定为List@Andrei是的,错过了那部分。@T–nNguỹn不,我只是忘了添加返回类型。事实上,你的答案非常有用,因为偏移量将是每个函数的。所以我可以这样做:var result=Wrapper(offset=>GetInts(1,offset),5)public List Wrapper(Func queryFunc,int offset){return queryFunc(offset);}现在我可以在每次为任何查询函数使用包装器时使用不同的偏移量,而不管它的签名是什么,如果您不需要返回值,它是灰色的,尝试使用
Action
而不是
Func
。或者将Func的返回类型指定为List@Andrei是的,遗漏了那部分。@T–nNguỹn不,我只是忘了添加返回类型。事实上,您的答案非常有用,因为偏移量是每个函数的。所以我可以这样做:var result=Wrapper(offset=>GetInts(1,offset),5)public List Wrapper(Func-queryFunc,int-offset){return-queryFunc(offset);}现在我可以在每次为任何查询函数使用包装器时使用不同的偏移量,不管它的签名如何,这非常好