2016-11-22 2 views
0

Dies könnte eine nooby Frage sein, aber ich stecke fest.Bearbeiten von Booleans aus einer anderen Klasse in einem Array

Was ich hier habe, ist Code in meiner Form. Dies ist das Ereignis, das ich meinen Tasten zugewiesen habe.
Diese Tasten sollen den Status booleans in SomeClass wechseln.

Diese booleans sind alle public static bool boolA usw.

Hier Code meines Formulars ist.

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"; 
     } 
    } 

Was passiert, ist, den Text der Schaltfläche wird auf „Stop“, aber nie auf „Start“, wenn ich es noch einmal auf.

Hilfe würde sehr geschätzt werden.

+1

'if (boools [index])' gibt es ein _o_ zu viel nur in diesem Code? – TripleEEE

+3

'Boole' wird jedes Mal neu definiert, wenn Sie auf die Schaltfläche klicken. – Liam

+0

@TripleEEE scheint Platzhalter-Code basierend auf den' Klassen'-Namen zu sein, aber ich könnte mich irren. –

Antwort

1

Ein bool ist ein value type. Sie sind atomar in .Net. Wenn Sie sie also einer neuen Variablen zuweisen, werden sie kopiert. So in:

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

bools[0] Leben in einer Speicheradresse und SomeClass.boolA lebt in einem anderen. Es gibt keine Beziehung (im Gegensatz zu einem Referenztyp). Oder um es anders auszudrücken bools[0] != SomeClass.boolA. Die Änderung bools[0] wirkt sich nicht auf SomeClass.boolA und umgekehrt aus.

Sie können dies sehen durch diesen Code ausgeführt wird:

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

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

So können Sie nicht tun, was Sie wollen, wie Sie es tun wollen. Grundsätzlich müssen Sie die SomeClass.boolA usw. unabhängig manipulieren, wahrscheinlich unter Verwendung einer switch oder einer if.

+0

Okay danke Liam. – Tvde1

+0

Wenn Sie Referenztypen speichern, wird das, was Sie versuchen, funktionieren. Zu Ihrer Information, aber nicht für Werttypen. – Liam

Verwandte Themen