Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

Есть ли возможность вызывать функции с делегата по одной?

#c_sharp


        Action  D_For_reproduct_Functions;

        D_For_reproduct_Functions += ReproductExp;
        D_For_reproduct_Functions += ReproductArcSin;
        D_For_reproduct_Functions += ReproductNormal;
        D_For_reproduct_Functions += ReproductLaplasa;
        D_For_reproduct_Functions += ReproductReley;
        D_For_reproduct_Functions += ReproductVeibula;


Мне нужно что-то вроде такого

        for (int i = 0; i < D_For_reproduct_Functions.Length; i++)
        {
            D_For_reproduct_Functions[i]();

            KSKolvogorov();

            //и тут в будущем KSPirsona
        }

    


Ответы

Ответ 1



Вы можете разобрать ваш делегат на составные части при помощи GetInvocationList(). Вот пример: Action combined = () => Console.WriteLine("Func 1"); combined += () => Console.WriteLine("Func 2"); combined += () => Console.WriteLine("Func 3"); var actions = combined.GetInvocationList().Cast(); foreach (var a in actions) { a(); Console.WriteLine("-----"); } Но раз вам такое понадобилось, возможно, вы делаете что-то неправильно. Думаю, вам реально вместо Action D_For_reproduct_Functions нужно List D_For_reproduct_Functions, и ваш код будет иметь вид List D_For_reproduct_Functions = new List(); D_For_reproduct_Functions.Add(ReproductExp); D_For_reproduct_Functions.Add(ReproductArcSin); D_For_reproduct_Functions.Add(ReproductNormal); D_For_reproduct_Functions.Add(ReproductLaplasa); D_For_reproduct_Functions.Add(ReproductReley); D_For_reproduct_Functions.Add(ReproductVeibula); for (int i = 0; i < D_For_reproduct_Functions.Count; i++) { D_For_reproduct_Functions[i](); KSKolvogorov(); }

Комментариев нет:

Отправить комментарий