Проверка истинности условия для ВСЕХ объектов списка

допустим у меня есть 4 объекта, у каждого объекта висит скрипт(один и тот-же), у этого скрипта есть bool переменная. Эти объекты у меня находятся в List. И я через метод хочу проверить что у всех этих объектов значение bool переменной true и после проверки вернуть методу true если это так и false если хотя бы у одного из объектов значение false. если честно не могу понять через что делать потому что если делать через допустим for он как только с первым объектом нашел совпадение он возвращает true методу и выходит не проверяя другие


Ответы (2 шт):

Автор решения: farkon00

Тут всё легко, это делается через foreach. В foreach запишем, что если переменная false, то возвращаем false. После foreach запишем return True;. То есть если метод ничего не вернул после фора, возвращаем True.

foreach (GameObject i in YourList)
{
    if (!i.GetComponent<YourScript>().YourBool)
    {
        return False;
    }
}
return True;
→ Ссылка
Автор решения: Максим Фисман

В добавление к ответу @farkon00 добавлю более короткий вариант с использованием LINQ

Проверим, что все элементы списка ListName удовлетворяют поставленному условию, используя Linq.All

  1. Если в массиве лежат объекты типа GameObject, и на каждом из них висит скрипт ScriptName, в котором нужно проверить переменную VarName
bool Foo ()
    => ListName.All(obj => obj.GetComponent<ScriptName>().VarName);
  1. Если в массиве лежат сразу объекты типа ScriptName, то еще проще:

bool Foo ()
    => ListName.All(obj => obj.VarName);

В целом Linq конструкция All эквивалентна циклу, данному в первом ответе. Разница в том, что Linq выглядит опрятнее (он короче + посмотрев на него легче понять, что он делает, чем глядя на 8-строчную функцию), однако с большими наборами данных он может давать некий ущерб в скорости. Подробнее здесь

→ Ссылка