2

私のクラスメートがこの質問をしました、そして私は彼に正しい答えを言っていることを確認したかったのです。基本的に、以下のコード(実際に答えとして「6」を表示します)は、MessageBox.Show((i-)。ToString());に到達したときに彼を混乱させました。

私の説明では、デクリメント操作(i--)は、MessageBoxオブジェクトの.Showメソッドに渡されているため、実際には実行されていません。つまり、実際にはその値を1減らしていないため、6が表示されます。

これは正しい説明ですか?値を同時に表示しながらinc/dec操作をスローしようとしたことがないので、これに関する私の推論が正しいかどうかはわかりません。ありがとう!

        int i = 6;            // I starts as 6...
        if (i >=4 )           // Then the check to see if i >= 4 is TRUE...
        {
            if( i == 5)       // The check to see if i == 5 is FALSE...
            {
                MessageBox.Show(i.ToString()); 
            }
            else
            {
                MessageBox.Show((i--).ToString());  // ****
            }
        }
        else 
        { 
            MessageBox.Show((i++).ToString());
        }
4

4 に答える 4

8

i--iの値を返し、デクリメント前の値を返します。

論理的に辞書式順序で読む必要があります(作成者が意図したとおり):

puts the value
and then decrements

前が6の場合、iの値が5の直後であっても、6(出力)を返します。

--iデクリメントして、デクリメントされた値を返すことに注意してください。

于 2012-05-03T17:43:32.613 に答える
4

i--事前デクリメント値を返します。デクリメントの値が必要な場合は、--i

于 2012-05-03T17:44:12.937 に答える
2

i--使用後にiをデクリメントすることを意味します。

于 2012-05-03T17:44:26.977 に答える
1

この(変数--)は後置デクリメント操作です。

msdnから

演算の結果は、デクリメントされる「前」のオペランドの値です。

したがって、ToString()は' i 'の現在のvalue(6)に適用され、次にその値がデクリメントされます。

C#仕様も参照してください。msdnの場合:接尾辞のインクリメントおよびデクリメント演算子

于 2012-05-03T18:24:13.630 に答える