Как извлечь результаты многоадресного делегата во время выполнения? - PullRequest
3 голосов
/ 08 декабря 2011

Не уверен, что это возможно, но мне интересно, как я получаю возврат двух методов, назначенных одному и тому же делегату (многоадресная передача) Я в основном задавался вопросом, есть ли способ поймать каждое возвращаемое значение? Возможно, мне придется повторить это, не совсем уверен ..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MutiCastDelegate2
{
    class Program
    {

        delegate string HelloWorldDelegate();

        static void Main(string[] args)
        {
            HelloWorldDelegate myDel1 = ReturnHelloWorld;
            HelloWorldDelegate myDel2 = ReturnHelloWorld2;
            HelloWorldDelegate myMultiDelegate = myDel1 + myDel2;

            Console.WriteLine(myMultiDelegate());
            Console.ReadLine();
        }


        public static string ReturnHelloWorld()
        {
            return "Return Hello World";
        }

        public static string ReturnHelloWorld2()
        {
            return "Return Hello World 2";
        }
    }
}

1 Ответ

2 голосов
/ 08 декабря 2011

Вы можете использовать MulticastDelegate.GetInvocationList(), чтобы получить доступ к каждому делегату в списке, тогда вам просто нужно вызвать каждого и получить результаты:

var delegates = myMultiDelegate.GetInvocationList();
foreach (var d in delegates)
{
    string result = (string) d.DynamicInvoke();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...