В выражениях A и B и C и D, если любое из условий (A, B, C или D) является False, все выражение является False.Поэтому, если вы начинаете выражение «и» с False, независимо от того, что еще вы И с ним, все выражение будет False.
То же самое с выражением «или».В выражении A или B или C или D, если любое из условий (A, B, C или D) имеет значение True, все выражение имеет значение True.Таким образом, если вы начинаете выражение «или» с True, независимо от того, что еще вы ИЛИ для него, все выражение будет True.
Что касается того, почему вам нужно запустить PredicateBuilder с буквальным True или False,Я считаю, что это было просто соглашение, чтобы сделать использование PredicateBuilder проще.Ваши выражения всегда начинаются с (логического) условия, за которым следуют 0 или более частей «И / или условия».Таким образом, вы можете иметь «А», или «А и В», или «А и В и С».Вы никогда не начинаете с «и А»..And (условие) PredicateBuilder добавляет «и условие» к выражению, поэтому вы не можете начать с него.Возможно, был конструктор, который позволил бы вам создать свое выражение и запустить его с начальным условием (новое выражение <...> (A)? Я на самом деле не проверял ... есть ли такое?), Но тогда вы быприходится обрабатывать ваше первое условие (вы, вероятно, перебираете некоторую коллекцию вещей и добавляете к своему выражению) иначе (вызывая конструктор), чем вы выполняете 2-е и последующие условия (вызывая .And (...) или .Or (...)).Методы .True <...> () и .False <...> () PredicateBuilder обрабатывают создание вашего выражения, а также добавляют первое (универсальное) условие, чтобы вы могли обрабатывать добавление 1-го и всех последующих условий вваш цикл такой же (вызывая .And (...) или .Or (...)).