2

以下のコードが機能しない理由を教えてください。

    int prePos = 0;
    int preNeg = 0;

    int postPos = 0;
    int postNeg = 0;

    for (int i = 0; i < pin1.GetLength(0); i++)
    {
        preNeg++ ? pin1[i, 0] < 0 : prePos++; //not working
        pin2[i, 0] < 0 ? postNeg++ : postPos++; //not working
    }

したがって、条件はpin1[i, 0]がゼロより小さい場合、preNeg1 ずつインクリメントされます。それ以外prePosの場合は、決定する必要があります。それ以外の場合は通常どおりこれを行うことができますが、なぜこの三項が機能しないのですか?

4

2 に答える 2

4

三項演算子は、式(値を示すもの)に評価される演算子であるため、を使用する式をステートメントとして使用できる(ステートメントとしては違法)以上、ステートメントとして使用することはでき+ませ1+1;ん。

三項演算子のこの特定の使用法が多少異なるのは、インクリメント(++)演算子の使用法です。演算子を使用すると、変数に対して操作を実行し(1ずつインクリメント)、値(変数の後に配置された++ときにインクリメントされる前の変数の値)を出力します。++

このように、以下はあなたがやろうとしていることを達成しますが、それからあなたは未使用の変数(不明確なコードは言うまでもなく)を残されるでしょう、それで私はこれが実際に使われているのを見ることができません。

var currentValue = pin1[i, 0] < 0 ? postNeg++ : postPos++;

すでに述べたように、あなたの最善の策は通常のif/で行くことelseです。それがその目的です。

于 2012-07-02T13:47:48.260 に答える
3
    preNeg++ ? pin1[i, 0] < 0 : prePos++; //not working
    pin2[i, 0] < 0 ? postNeg++ : postPos++; //not working

三項演算子は、変数またはプロパティに割り当てられた値を返すためです。

お気に入り

int a = true ? 1 : 0;

a は 1 になります

三項演算子の構文は

var variable = condition ? 
              value_to_return_in_variable_if_condition_true :  
              value_to_return_in_variable_if_condition_false;

さらに、三項演算子は、単一の変数に値を代入するために使用されます。2 つの変数ではありません。

于 2012-07-02T13:36:59.343 に答える