2

次のコードが違法なのは なぜですか?

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

このコードが実用的でないことはわかっています。なぜそれが許可されていないのか、私は単に興味があります。他の効果なしでその行を削除することで修正できるかどうかは気にしません。これはでタグ付けされているため、言語仕様からの証拠を含めてください。

4

3 に答える 3

13

--変数ではなく値を返しますが、演算子 at++はそれが変数であると想定しているため、機能しません。

于 2014-12-05T15:22:34.947 に答える
7

C# 仕様「7.6.9 後置インクリメントおよびデクリメント演算子」から:

後置インクリメントまたはデクリメント操作のオペランドは、変数、プロパティ アクセス、またはインデクサー アクセスとして分類される式である必要があります。演算の結果は、オペランドと同じ型の値です。

これはあなたの質問に答えると思います。

それはまた、あなたができない理由i++++でもあり、括弧(i++)++を使用しても同じコンパイルエラーが発生します。

于 2014-12-05T15:25:19.247 に答える
3

--and++演算子は値を返すだけでなく、操作対象の変数を変更します。どの順序で評価しようとしても--i++、最初の演算子はを返しますが、2 番目の演算子はその戻り値を代入できません。

于 2014-12-05T15:28:48.070 に答える