質問

私は、forループ内で割り当てる必要があり、変数のカップルを持っています。ループが終了どうやら、C#がそこで起こったものは何でも無視され、変数は元の状態に戻ります。具体的には、私は彼らがリストの最後と最後から要素である必要があります。ここでは、コードがあります:

int temp1, temp2;
for (int i = 0; i < toReturn.Count; i++) {
     if (i == toReturn.Count - 2) { // Next-to-last element
         temp1 = toReturn[i];
     } else if (i == toReturn.Count - 1) { // Last element
         temp2 = toReturn[i];
     }
}
// At this point, temp1 and temp2 are treated as uninitialized

注:ネヴァーマインド悪い変数名、彼らは本当に一時的な変数です。何より複雑な物事を混乱させるます。

さて、これを解決する方法は2つ(私の知っていること)がある。一つは、変数は、ループの終了後に生きるようにする方法を考え出すされ、他はあなたがするtemp = my_list[-1]を行うことができますPythonの、のような何かを行うことですリストの最後の要素を取得します。これらの可能性のいずれかがC#でますか?

編集の私がコンパイルしようとすると、私はエラー「未割り当てのローカル変数 『TEMP1』の使用」を取得します。このコードは、でもそれだけで呼ばれることは決してありません方法の中に座っています、実行されません。このことができます場合は、私は別のループ内で変数を使用しようとしています。

役に立ちましたか?

解決

だけでないのはなぜ...

int temp1 = 0;
int temp2 = 0;
    if (toReturn.Count > 1)
        temp1 = toReturn[toReturn.Count - 2];
    if (toReturn.Count > 0)
        temp2 = toReturn[toReturn.Count - 1];

他のヒント

toReturn.Countが0の場合、ループが実行されることはありませんし、TEMP1とTEMP2が初期化されることはありません。

これは何をするのですか?

if (toReturn.Count > 1) {
    temp1 = toReturn[toReturn.Count - 2]
    temp2 = toReturn[toReturn.Count - 1]
}

TEMP1を与えることを試してみて、初期値すなわち0をTEMP2か、彼らは初期化されない可能性がありますので、何が適切です。

int temp1 = 0; // Or some other value. Perhaps -1 is appropriate.
int temp2 = 0; 

for (int i = 0; i < toReturn.Count; i++) {
     if (i == toReturn.Count - 2) { // Next-to-last element
         temp1 = toReturn[i];
     } else if (i == toReturn.Count - 1) { // Last element
         temp2 = toReturn[i];
     }
}

コンパイラはtemp1temp2は間違いなくそれらの値を読み取ろうとする前に、の割り当てられていることが必要です。コンパイラは、あなたのforループの変数を割り当てます知りません。ループのために、これまでのすべての実行されている場合、それは知りません。あなたの場合、条件が今までtrueされるかどうかも分かりません。

上記のコードはtemp1temp2が何かに割り当てられていることを確認します。

:あなたはtemp1temp2がループの中にを割り当てられているかどうかを確認したい場合は、これを追跡することを検討
int temp1 = 0;
int temp2 = 0;
bool temp1Assigned = false;
bool temp2Assigned = false;

for (int i = 0; i < toReturn.Count; i++) {
     if (i == toReturn.Count - 2) { // Next-to-last element
         temp1 = toReturn[i];
         temp1Assigned = true;
     } else if (i == toReturn.Count - 1) { // Last element
         temp2 = toReturn[i];
         temp2Assigned = true;
     }
}

あなたはデフォルト値が必要な場合:

int count = toReturn.Count;
int temp1 = count > 1 ? toReturn[count - 2] : 0;
int temp2 = count  > 0 ? toReturn[count - 1] : 0;

あなたはデフォルト値を気にして所定の位置に、カウントの前のチェックをお持ちでない場合:

int count = toReturn.Count;
int temp1 = toReturn[count - 2];
int temp2 = toReturn[count - 1];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top