Как вернуть логическое значение из Action Delegate в List.ForEach () - PullRequest
0 голосов
/ 01 сентября 2010

Я пытаюсь реализовать следующую вещь. Мне нужно вернуть истину, если какая-либо кнопка будет изменена. Я не хочу больше зацикливаться.

Поскольку ForEach ищет делегат типа действия. Так можно ли вернуть значение bool из-за удаления

public bool AreSettingChanged()
{
    objRpmButtonHolder.RpmButtonCollection.ForEach(btn
        => {
            if (btn.IsChanged)
                return true;
    });
    return true;
}

Ответы [ 5 ]

6 голосов
/ 01 сентября 2010

Попробуйте это

public bool AreSettingChanged() 
{ 
    return objRpmButtonHolder.RpmButtonCollection.Any(b => b.IsChanged);
} 
3 голосов
/ 01 сентября 2010

Вы не можете, потому что так определен метод ForEach. В вашем случае вам лучше использовать метод расширения Any:

bool result = objRpmButtonHolder.RpmButtonCollection.Any(btn => btn.IsChanged);
2 голосов
/ 01 сентября 2010

Может быть, вы ищете другой метод, например Find или Exists.

0 голосов
/ 01 сентября 2010

Наилучшим подходом было бы использование вышеупомянутого любого метода, но для более общего подхода с возвратом переменных из лямбда-выражений вы могли бы захватить внешнюю переменную и использовать ее в качестве возвращаемого результата, т.е.

        public bool AreSettingChanged()
        {
            bool changed = false;
            objRpmButtonHolder.RpmButtonCollection.ForEach(btn
                =>
                {
                    if (btn.IsChanged)
                        changed = true;
                });
            return changed;
        }
0 голосов
/ 01 сентября 2010
public bool AreSettingChanged()
{
    return objRpmButtonHolder.RpmButtonCollection.Exists(btn
        => { return btn.IsChanged; });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...