Почему нельзя использовать префикс и постфикс одновременно?
Почему следующий код недопустим?
using System;
class Program
{
static void Main(string[] args) {
int i = 0;
--i++;
Console.WriteLine(i);
}
}
Это дает мне следующую ошибку на --i++
:
The operand of an increment or decrement operator must be a variable, property or indexer
Я знаю, что этот код не имеет практического применения; Мне просто любопытно, почему это не разрешено. Мне все равно, что это можно исправить, удалив эту строку без других эффектов. Поскольку это помечено языком-юристом, пожалуйста, включите доказательства из языковой спецификации.
3 ответа
Из спецификации C# "7.6.9 Постфиксные операторы увеличения и уменьшения":
Операндом операции увеличения или уменьшения постфикса должно быть выражение, классифицированное как переменная, доступ к свойству или доступ индексатора. Результатом операции является значение того же типа, что и операнд.
Я думаю, что это отвечает на ваш вопрос.
Это также причина, по которой вы не можете сделать i++++
ни с круглыми скобками: (i++)++
выдает ту же ошибку компиляции.
--
возвращает значение, не переменную, а оператор в ++
ожидает, что это будет переменная, поэтому она не работает.
--
а также ++
операторы не просто возвращают значения, они меняют переменную, с которой они работают. Независимо от того, какой порядок вы пытаетесь оценить --i++
первый оператор возвращает значение, которому второй оператор не сможет присвоить свое возвращаемое значение обратно.