C# 修改out参数的Func
我有一个功能:C# 修改out参数的Func,c#,C#,我有一个功能: private static Response WaitForAPIReply(Func<Response> f) { while (true) { var response = f(); if (response.MISSING == "WAIT") { Console.WriteLine("WAIT"); Thread.Sleep(TimeSpan.FromSeconds(0.1)); } e
private static Response WaitForAPIReply(Func<Response> f)
{
while (true)
{
var response = f();
if (response.MISSING == "WAIT")
{
Console.WriteLine("WAIT");
Thread.Sleep(TimeSpan.FromSeconds(0.1));
}
else
{
return response;
}
}
}
我想在GetData
中添加一个out
参数,并在waitforapreply
函数中使用该参数。但我无法为此修改waitforapreply
?我在网上搜索,可以看到我可以使用委托。但是我无法在作为参数传递给
waitforapreply
时修复此问题,为什么要修改waitforapreply
?请注意,现在GetData
有两个参数,但是在f()
调用内部waitforapreply
中没有使用它们。out
参数应该在GetTestData
内部的某个地方声明,以便您可以将其传递到GetData
中
// First approach
private static Response GetTestData(int a, string b)
{
int c;
return WaitForAPIReply(() => GetData(a, b, out c));
}
// Second approach
private static Response GetTestData(int a, string b, int c)
{
return WaitForAPIReply(() => GetData(a, b, out c));
}
第二种方法令人困惑,而第三种方法无法编译(幸运的是,根本无法保证lambda将在何时何地执行;对于
out
或ref
参数,这不是您想要的)。@kapol,您的解决方案对于声明out参数非常有用。但是我想在waitforapreply函数中使用out c。我在问题中没有提到这一点,所以我正在编辑我的查询。@luan关于第三种方法的观点很好。我将从答案中删除它。那么您希望waitforapreply
也有一个out
参数吗?然后您想像waitforapreply((out YourType o)=>GetData(a,b,out o),out c)那样调用它代码>,还是什么?不清楚你的问题是什么?也许然后您想像私有静态响应waitforapreply(youroutpunc f,out YourType yt){…}
那样声明它。请指出您的问题所在。@Jeppe,问题是我想在'WaitForAPIReply'函数中使用'GetData'的'out'参数中收到的数据试试我在第一条评论中写的内容。您必须定义自己的“func”委托类型。它是这样的:namespace YourSpace{delegate TResult YourOutFunc(out TOut o);}
您可以将其放入一个新文件YourOutFunc.cs
。祝你好运
// First approach
private static Response GetTestData(int a, string b)
{
int c;
return WaitForAPIReply(() => GetData(a, b, out c));
}
// Second approach
private static Response GetTestData(int a, string b, int c)
{
return WaitForAPIReply(() => GetData(a, b, out c));
}