这可能是一个不成熟的问题,但我被卡住了。
我这里的代码是我的表格中的代码。这是我分配给我的按钮的事件
这些按钮应该在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";
}
}
发生的事情是,按钮的文字被设置为"停止"但从来没有"开始"当我再次点击它时。
帮助非常适合。
答案 0 :(得分:1)
bool
是value 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
等,可能使用switch
或if
。