无状态声明

时间:2019-03-14 10:13:19

标签: c# button triggers declaration

你好,我有简单的代码,想对标签进行一键控制:

private void button1_Click(object sender, EventArgs e)
{            
    bool T=true;

    if (T)
    {
        label1.Text = "GOOD";
        T=false;
    }
    else if(!T){
        label1.Text = "BAD";
        T=true;
    }
}

问题在于,每当我按下按钮时,它就声明为true,并且每次都为true。我不能这样声明

bool T;

因为出现错误:

  

CS0165使用未分配的本地变量'T'WindowsFormsApp1

如何声明一次?

2 个答案:

答案 0 :(得分:0)

当您要在某些状态和未点击状态之间切换时,您需要在中的成员,而不是仅在方法中存在的变量:

class MyClass
{
    bool foo;

    private void button1_Click(object sender, EventArgs e)
    {            
        if (this.foo)
        {
            label1.Text = "GOOD";
            this.foo=false;
        }
        else
        {
            label1.Text = "BAD";
            this.foo = true;
        }
    }
}

还要注意,我省略了else if,因为布尔只能有两个状态:truefalse。没有第三种条件。因此,与第一个条件不匹配的所有内容都将自动与第二个条件匹配,您无需(再次)测试bool值。

答案 1 :(得分:0)

如果要将label1.TextGOOD切换到BAD,可以尝试使用简单的转向运算符:

private void button1_Click(object sender, EventArgs e)
{            
    label1.Text = string.Equals("GOOD", label1.Text, StringComparison.OrdinalIgnoreCase)
      ? "BAD"
      : "GOOD";
}

如果您想要更详尽的解决方案,让我们提取属性,例如:

public bool IsGood {
  get {
    // Simplest implementation; often adding a backing field is a good idea
    return label1.Text = string
      .Equals("GOOD", label1.Text, StringComparison.OrdinalIgnoreCase);
  }
  set {
    label1.Text = value ? "GOOD" : "BAD";
  }
}

然后点击事件

 private void button1_Click(object sender, EventArgs e) {
   IsGood = !IsGood; 
 }