Если в условии написать два раза &, то при первом false, остальные условия проверяться не будут. Продумано системой для оптимизации. Нет смысла проверять остальные условия, потому что исход оператора «И» уже ясен. ```csharp if (scale == other.scale && rotation == other.rotation) return true; ``` Если указать один раз &, то мы принудительно заставим проверить все условия. Это бывает нужно, когда у нас в условиях есть методы, который обязательно нужно вызвать. ### По-поводу оператора присваивания &= В C# есть оператор `&=`. Он используется для присваивания результатов побитовой операции AND. Однако в вашем случае, вам нужен оператор `&&=`, который является оператором AND с присваиванием. Но, к сожалению, такой оператор не существует в C#. В вашем случае, чтобы получить логическое "И" между результатами нескольких утверждений и присвоить результат переменной, вам придется явно присваивать значение каждый раз: ```csharp bool indexesAreCorrect = removedIndexes[0] == 0; indexesAreCorrect &= setIndexes[0] == 1; indexesAreCorrect &= addedIndexes[0] == 2; ``` В этом коде `indexesAreCorrect` будет `true` только в том случае, если все три условия выполняются (то есть все три утверждения возвращают `true`). Если хотя бы одно из условий не выполняется, `indexesAreCorrect` становится `false`. Тем не менее, важно отметить, что оператор `&` выполняет побитовую операцию AND и не является "ленивым", как `&&`. Это означает, что все условия будут проверены, даже если одно из них уже `false`. В случае булевых переменных это не должно стать проблемой, но могут быть некоторые отличия в поведении для других типов данных.