Компилятор C# не игнорирует присвоение переменной ее же значения в сложном выражении. Такое поведение, называемое "обратным предпринятием" (redundant assignment), не только разрешено, но и может иметь практическую пользу в некоторых случаях.
В C#, по умолчанию переменным присваиваются значения при их объявлении. Например:
int x = 5;
В этом случае переменной x будет присвоено значение 5. Но если в дальнейшем вы хотите изменить значение переменной, вы можете присвоить ей новое значение с использованием арифметических операторов. Например:
x = x + 10;
Здесь переменная x присваивает самой себе ее текущее значение (5) плюс 10, что приведет к новому значению 15.
Таким образом, компилятор C# не игнорирует присвоение переменной ее же значения в сложном выражении и выполняет эту операцию в соответствии с логикой языка.
Однако, необходимо быть внимательными при использовании обратного предпринятия, так как оно может привести к сложности чтения и понимания кода. В некоторых случаях, использование дополнительной переменной или более понятного выражения может быть предпочтительнее для поддержки и читаемости кода. Кроме того, обратное предпринятие может привести к неоптимальному использованию памяти или производительности, если присвоение выполняется в цикле или внутри сложного выражения.