Реализуйте расширение для метода (как если бы это было действие) - PullRequest
0 голосов
/ 15 мая 2019

Я хочу реализовать метод цикла без параметров в одной строке кода вместо использования while(true) Loop();

В основном я хотел бы иметь это:

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

или это

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

Для достижения вышеизложенного мне удалось создать расширение, но оно работает, только если я преобразовал методы в делегаты.

Extension

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