Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改out参数的Func_C# - Fatal编程技术网

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));
}