传递bool Foo(params [])作为方法参数

Ody*_*dys 5 c# invoke .net-3.5

有些方法需要多次运行才能验证.在我的情况下,有一些表达式bar.Name.Equals("John Doe"),我想运行并运行,直到此表达式验证.

就像是:

bool succeeded = TryUntillOk(bar.Name.Equals("John Doe"), 15, 100);
Run Code Online (Sandbox Code Playgroud)

哪个TryUntillOk是一个方法,运行这个表达式15次,每次调用之间的睡眠时间为100毫秒.

我读了这个类似问题的优秀答案清单,但在我的情况下,没有这个TryUntillOk方法可以接受的标准代表.

问题的标题不具有建设性.随意编辑:)

Jon*_*Jon 8

你可能正在寻找这样的东西:

bool TryRepeatedly(Func<bool> condition, int maxRepeats, TimeSpan repeatInterval)
{
    for (var i = 0; i < maxRepeats; ++i)
    {
        if (condition()) return true;
        Thread.Sleep(repeatInterval); // or your choice of waiting mechanism
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

将调用如下:

bool succeeded = TryRepeatedly(() => bar.Name.Equals("John Doe"),
                               15,
                               TimeSpan.FromMilliseconds(100));
Run Code Online (Sandbox Code Playgroud)

这里唯一有趣的部分是你将条件指定为a Func<bool>,它是一个不带参数并返回布尔值的方法的委托.Lambda表达式语法允许您在调用站点上轻松构造此类委托.