2016-11-22 5 views
0

これは恐ろしい質問かもしれませんが、私は立ち往生しています。配列内の別のクラスのブール値を編集する

私がここに書いたのは自分のフォームのコードです。これは私が自分のボタンに割り当てたイベントです。
これらのボタンはbooleansの状態をSomeClassに切り替えます。

これらのブール値は、ここですべてのpublic static bool boolAなど

は私のフォームのコードです。

public void switchButton(object sender, EventArgs e) 
    { 
     Button[] buttons = { btnA, btnB }; 
     bool[] bools = { SomeClass.boolA, SomeClass.boolB }; 

     Button button = (Button)sender; 
     int index = Array.IndexOf(buttons, button); 


     if (bools[index]) 
     { 
      bools[index] = false; 
      button.Text = "Start"; 
     } 
     else 
     { 
      bools[index] = true; 
      button.Text = "Stop"; 
     } 
    } 

ボタンのテキストは「停止」に設定されますが、再度クリックすると「開始」することはありません。

ヘルプは非常にうまくいくでしょう。

+1

'if(boools [index])'にはこのコードの_o_がありますか? – TripleEEE

+3

ボタンをクリックするたびに 'bools'が再定義されます。 – Liam

+0

@TripleEEEは' class'名に基づいてプレースホルダーコードであるようですが、間違っている可能性があります。 –

答えて

1

boolは、value typeである。彼らは.Netの中で原子です。したがって、それらを新しい変数に割り当てると、がコピーされます。です。だから、中:1つのメモリアドレスで

bool[] bools = { SomeClass.boolA, SomeClass.boolB }; 

bools[0]生活と異なるものでSomeClass.boolA生活。関係はありません(参照型とは異なります)。別の言い方をするとbools[0] != SomeClass.boolAです。 bools[0]を変更してもSomeClass.boolAには影響せず、その逆もありません。

あなたはこのコードを実行することで、これを見ることができます:

bool a = false; 
bool[] bools = new bool[] {a}; 
bools[0] = true; 

a == false; //true 
bools[0] == true; //true 

だからあなたはあなたがそれをやりたいかやりたいことができません。基本的にSomeClass.boolAなどを独立して操作する必要があります。おそらくswitchまたはifを使用しています。

+0

Liamに感謝します。 – Tvde1

+0

参照型を格納しようとしている場合は、FYIは動作しますが、値型は参照できません。 – Liam

関連する問題