Декларация без государства - PullRequest
0 голосов
/ 14 марта 2019

Здравствуйте, у меня есть простой код, и я хотел бы иметь один элемент управления меткой:

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

Проблема в том, что каждый раз, когда я нажимаю кнопку, она объявляется как истинная, и каждый раз, когда условие истинно.Я не могу объявить это так

bool T;

, потому что получаю ошибку:

CS0165 Использование неназначенной локальной переменной 'T' WindowsFormsApp1

Как яможете объявить это один раз?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Если вы хотите переключить label1.Text с GOOD на BAD, вы можете попробовать простой оператор Turnary:

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

Если вы хотите более сложное решение, давайте extractсвойство , например:

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; 
 } 
0 голосов
/ 14 марта 2019

Если вы хотите переключаться между некоторым состоянием cklicked и unclicked, вам нужен член в вашем классе , а не переменная, которая существует только в методе :

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, потому что у bool может быть только два состояния: true или false.Там нет способа для третьего условия.Таким образом, все, что не соответствует первому условию, автоматически будет соответствовать второму, вам не нужно проверять (снова) значение bool.

...