Если в условии написать два раза &, то при первом 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`. В случае булевых переменных это не должно стать проблемой, но могут быть некоторые отличия в поведении для других типов данных.