Область действия переменной в c # - PullRequest
1 голос
/ 03 апреля 2012

Я столкнулся с проблемой, связанной с областью применения используемых переменных.

код:

   int row_no, upflag, downflag;
        for (int i = count; i > 0; i--)
        {
            asd = ds1.Tables[out_table].Rows[i][59].ToString();
            int com1 = string.Compare(asd, "Upstream");
            int com2 = string.Compare(asd, "Downstream");
            if (com1 == 0 || com2 == 0)
            {
                row_no = i;
                if (com1 == 0)
                    upflag = 1;
                else
                    downflag = 1; 
                break;
            }

        }
        if (upflag == 1)//
        {
            string val1 =  ds1.Tables[out_table].Rows[count][59].ToString();
            string val2 = ds1.Tables[out_table].Rows[(count - 1)][59].ToString();
        }

в этом коде, в последнем условии if (upflag == 1),мой VS2010 показывает красную линию под флагом «вверх» и говорит, что использует неназначенную локальную переменную «флаг».

почему это так?Это было совершенно нормально в c ++, но здесь в нескольких вложенных циклах / условии значение, присвоенное переменной внутри скобок, не отражается за их пределами, даже если переменная объявлена ​​перед циклом.

Пожалуйста,помощь

Ответы [ 5 ]

3 голосов
/ 03 апреля 2012

Рассмотрим, что произойдет, если count == 0.Тело цикла for не будет выполнено, и значение upflag не будет присвоено.Вот почему компилятор сказал «использование неназначенной локальной переменной» - это означает, что возможно , что переменная не была назначена.

Это было совершенно нормально в c ++

Нет, не было.Компилятор, возможно, не жаловался на это, но это было все еще неопределенное поведение .

0 голосов
/ 03 апреля 2012

Причина этого в том, что компилятор C # не позволяет использовать неинициализированные переменные.Если компилятор обнаруживает использование переменной, которая, возможно, не была инициализирована, он генерирует ошибку компиляции.

В C ++ он показывает предупреждающее сообщение для того же самого, но не препятствует компиляции пользователя.Если вы инициализируете count в объявлении, оно будет работать.

0 голосов
/ 03 апреля 2012

upflag объявлен, но ему не присвоено значение, и он не гарантируется, что будет инициализирован в цикле (например, если count равен 0, цикл не попадет в назначение upflag).

Попробуйте установить upflag = 0 в качестве значения по умолчанию при его объявлении.

0 голосов
/ 03 апреля 2012

ИСПОЛЬЗОВАНИЕ:

int row_no = 0;// или любое другое значение, например -1

int upflag = 0;// или любое другое значение, например -1

int downflag = 0; // или любое другое значение, например -1

, поскольку эти значения должны быть сначала инициализированы.

0 голосов
/ 03 апреля 2012

мой VS2010 показывает красную линию под флагом «вверх» и говорит, что использует неназначенную локальную переменную «флаг».

Это именно ваша проблема. Он не назначен, и вы пытаетесь сравнить его значение.

Сначала инициализируйте его значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...