2016-11-22 61 views
0

這可能是個不好的問題,但我被卡住了。編輯數組中的另一個類的布爾值

我在這裏的代碼是我的形式。這是我分配給我的按鈕的事件。
這些按鈕應該在SomeClass中切換booleans的狀態。

這些布爾都是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"; 
     } 
    } 

會發生什麼情況是,按鈕的文本被設置爲「停止」,但從未再次點擊「開始」。

幫助將非常appriciated。

+1

'if(boools [index])'在這段代碼中是否有一個_o_? – TripleEEE

+3

'bools'重新定義每次點擊按鈕 – Liam

+0

@TripleEEE似乎是基於'class'名稱的佔位符代碼,但我可能錯了。 –

回答

1

A boolvalue type。他們在.Net中是原子。所以當你將它們分配給一個新的變量時,它們是複製。所以:

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等,可能使用switchif

+0

好的,謝謝你,利亞姆。 – Tvde1

+0

如果你正在存儲引用類型,你試圖做的工作,FYI,但它不會爲值類型。 – Liam

相關問題