Страницы

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

пятница, 19 апреля 2019 г.

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

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 }


Ответ

Вы можете разобрать ваш делегат на составные части при помощи 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(); }

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

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