веселье c<bool> событий и головная боль - PullRequest
0 голосов
/ 27 мая 2020

У меня есть логическое событие, и я пытаюсь вызвать каждого подписчика индивидуально, поэтому могу вернуть false, если хотя бы один подписчик возвращает false. Пока из-за моих попыток у меня не осталось ничего, кроме усталого мозга, который хочет плакать и съесть пирог (а потом поплакать).

Для функции, которая действительно вызывает событие, у меня есть делал это:

foreach (Delegate sub in SomeBooleanEvent.GetInvocationList())
             {
                 someBool = sub;
                 //blah blah blah code blah blah blah
                 }
             }

Я получаю следующую ошибку:

CS0029: невозможно неявно преобразовать тип System.Delegate в bool

Я так запутался ... Помогите мне ... пожалуйста ... ?

Редактировать: После того, как мне наконец удалось собрать силу воли для решения этой проблемы, я обнаружил, что использует func<bool> вместо Delegate вроде работает частично.

Однако теперь у меня возникла новая проблема. Когда я вызываю событие, присутствует / звонит только один абонент?

1 Ответ

0 голосов
/ 30 мая 2020

Я наконец понял, что происходит. Для тех, кому это может пригодиться, следует использовать func<bool> вместо Delegate (код, который я сделал перед последним редактированием, не вызвал подписчика, потому что я случайно удалил блок кода, который вызвал бы каждый метод).

Просто выполнив

public event Func<bool> onAWildBooleanEvent;

public bool? AWildBooleanEVent(){
            bool? result = null;
            if(daBool!=null){
                foreach (Func<bool> sub in onAWildBooleanEvent.GetInvocationList())
                {
                    if(result == null){
                        result = sub();
                    }else{
                        if(sub()!=result){
                            result= false;
                        }
                    }

                }
                return AoNBool;
            }
            return null;
        }  

Это должно работать для других типов, а также до тех пор, пока вам не нужны обработчики событий и аргументы событий. Просто убедитесь, что вы установили fun c на соответствующий тип. Кроме того, если вы хотите, чтобы запускались все события, обязательно их вызывайте. В противном случае они не будут уведомлены о событии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...