Как вы добавляете что-то к неинициализированной переменной? c#

#c#

#c#

Вопрос:

Я пытаюсь создать стиль кликера cookie, в котором каждый раз, когда вы нажимаете на что-то, оно добавляет 1 к переменной. Я пытаюсь это сделать int clicks = clicks 1 , но там сказано, что это использование неинициализированной переменной. Я попытался установить int clicks = 0 , но затем он говорит, что clicks уже определен в области видимости. Я попытался посмотреть, могу ли я сделать что-то подобное if (clicks == null) , но, очевидно, он не может это проверить, потому что это не переменная. Я использовал c # всего около одного дня, может кто-нибудь, пожалуйста, помочь?

     private void cookie_Click(object sender, EventArgs e)
    {
        int clicks = 0;
        clicks = clicks   1;
        numClicks.Text = ""   clicks;
    }
 

^ это и есть код. я также понял, что когда я нажимаю на нее, она сбрасывается на 0 и возвращается к 1, поэтому она не может перейти на 1, 2, 3 и т.д. есть ли способ установить переменную при запуске формы, а затем начать добавлять клики? я такой тупой

Комментарии:

1. Для начала не используйте неинициализированные переменные. int clicks = clicks 1 хотя это не имеет смысла. Вы не можете увеличить что-то, чего еще даже не существует. int clicks=0; работает. clicks работает. clicks =1 workds

2. Можем ли мы увидеть ваш код? Код, который объявляет clicks , в частности? Совет профессионала: всегда показывайте код, о котором вы спрашиваете.

3. Я попытался установить «int clicks = 0», но затем он говорит, что clicks уже определено в области видимости , вы используете int ключевое слово только при объявлении переменной, не используйте его впоследствии.

4. «есть ли способ установить переменную при запуске формы, а затем начать добавлять клики?» — да. Создайте clicks поле класса в своей форме. Рассматриваемый код создает локальную (для области видимости обработчика событий) переменную. Он не будет виден за пределами этого блока и не переживет поток управления, покидающий блок. Если вы сделаете его полем класса, оно будет «сохранять» значение до тех пор, пока экземпляр этого класса не будет уничтожен.

Ответ №1:

 int clicks = clicks   1;
 

Действительно бессмысленно. Это код, который объявляет и инициализирует clicks , поэтому вполне логично, что мы не можем спросить: «Чему равно значение clicks ?» (для того, чтобы мы могли добавить к нему одно); пока мы определенно не присвоили значение clicks , значение не определено.

Вместо:

 int clicks = 0;
 

А затем, когда вы хотите увеличить его:

 clicks  ;
 

Комментарии:

1. это работает, но я понял, что этот код запускается, когда они нажимают, поэтому он возвращает кликам значение 0 и добавляет 1. я искал, но я действительно в замешательстве, как вы можете объявлять клики, не объявляя их при событии щелчка?

2. @oops вы бы объявили его как поле , а не локальное , т. Е. Переместили объявление за пределы метода; однако вы не сказали нам, что это за пользовательский интерфейс: предыдущий будет работать для клиентских приложений, таких как WPF, winforms и т. Д., Но Не будет работать для Интернета из-за как работает жизненный цикл http

Ответ №2:

Вы захотите сделать что-то вроде этого:

 int clicks = 0;//Define an integer 'clicks' and set it to 0
//and in your click handler:
clicks = clicks   1;//Increment your count.
 

Примечание:

  • Щелчки — это целое число, оно никогда не может быть нулевым. (посмотрите примитивы c # для получения дополнительной информации)
  • Использование int clicks = clicks 1 не имеет смысла. В правой части уравнения, какова ценность кликов? Это еще не определено.

Комментарии:

1. «ищите примитивы c #» и / или типы значений .

Ответ №3:

Проблема с вашей реализацией заключается в том, что каждый раз, когда вызывается функция, первое, что она делает, это устанавливает значение clicks равным 0. Вам нужно инициализировать его вне функции, чтобы избежать этого. Если вы инициализируете его в классе, он будет установлен в 0 изначально при создании класса, тогда вы можете увеличивать значение при каждом вызове функции. Не уверен, что именно ваш вариант использования, но без дополнительной информации я бы рекомендовал сделать что-то подобное.

 class YourClass {
    // initialize outside of the function that increases the counter
    int clicks = 0;
    // rest of the code in class

    private void cookie_Click(object sender, EventArgs e)
    {
        clicks  ;
        // this would also work: clicks = clicks   1;
        numClicks.Text = ""   clicks;
    }
}