Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 有没有办法施展Func<;v1、v2、out1>;to Func<;out1>;假设我知道v1和v2?_C#_Events_Lambda_Casting_Delegates - Fatal编程技术网

C# 有没有办法施展Func<;v1、v2、out1>;to Func<;out1>;假设我知道v1和v2?

C# 有没有办法施展Func<;v1、v2、out1>;to Func<;out1>;假设我知道v1和v2?,c#,events,lambda,casting,delegates,C#,Events,Lambda,Casting,Delegates,所以我有一个函数,它接受一个没有参数的函数: public static bool RetryUntilSuccessOrTimeout(Func<bool> task, TimeSpan timeSpan) { bool success = false; int elapsed = 0; while ((!success) && (elapsed < timeSpan.TotalMilliseconds)

所以我有一个函数,它接受一个没有参数的函数:

public static bool RetryUntilSuccessOrTimeout(Func<bool> task, TimeSpan timeSpan)
    {
        bool success = false;
        int elapsed = 0;
        while ((!success) && (elapsed < timeSpan.TotalMilliseconds))
        {
            Thread.Sleep(1000);
            elapsed += 1000;
            success = task();
        }
        return success;
    }
我有一个函数,它采用了与这三个函数相同的aruments。所以我提供了这些信息。有没有一种方法可以将这些函数作为不带任何参数的函数传递(因为我提供了它们),这样我就可以将其传递到retryuntillsuccessortimeout()的“任务”中

问题的封装图像:


是的。基本上你就是这么做的

() => func(a, b)

您需要的是“部分函数应用程序”。C#没有像某些语言(F#、Haskell)那样的语言级支持,但在某些情况下使用lambda表达式是有效的。@stt106不,它不是。正如前面的评论中提到的,它是部分函数应用程序。如果使用这个函数,那就是使用一个
Func
并创建一个
Func
。当我看到像这样调用任何一个Func时,我内心都在畏缩。在您的情况下,如果func为null,则可能需要引发异常。我习惯于通过
task?.Invoke()调用它们??当可能出现违约时,为true。否则,就地/上游处理空参考。
() => func(a, b)