在方法上实现扩展(好像是一个动作)

时间:2019-05-15 15:48:39

标签: c# functional-programming extension-methods func

我想在仅一行代码中实现不带参数的方法循环,​​而不是使用while(true) Loop();

基本上我想要这个:

public void StartLoop_InOneLine() => LoopMethod().Loop(FuncBoolToStopLoop());

或这个

public void StartLoop_InOneLine() => LoopMethod.Loop(FuncBoolToStopLoop());

为达到上述目的,我设法创建了一个扩展,但仅当我将方法转换为委托时,该扩展才起作用。

扩展名

public static class LoopExtensions
        {
            public static void Loop(this Action method, Func<bool> loopUntil)
            {
                while(loopUntil.Invoke())
                method.Invoke();
            }
        }

我想了解是否以及如何实现以上所述以进一步实现此模式。

类示例

public class Looping
    {
        //what I would like to do
        public void StartLoop_InOneLine() => LoopMethod().Loop(FuncBoolToStopLoop());

        //what I want to achieve, in practice
        public void StartLoop_InPractice()
        {
            Action method = LoopMethod;
            Func<bool> loopUntil = FuncBoolToStopLoop;

            method.Loop(loopUntil);
        }

        private void LoopMethod(){}

        private bool FuncBoolToStopLoop() => true;
    }

0 个答案:

没有答案