Member 14120682 Ответов: 1

Инициализатор поля не может ссылаться на нестатическое поле C#


int temp = MCUData[temp_i];
        int temp2 = MCUData[temp_i + 1];
        int result;
        int temp1;
        temp1 = MCUData[temp_i] << 8;
            result = temp1 | temp2;
            crc_register = result;

            int temp_int;

            if (result == crc_register)
            {
                j = 0;
                 for (i = 3; i<no_of_bytes + 3;)
                   {
                      temp_buf[j++] = MCUData[i++];
                   }

                        row = 0;
                        col = 1;
                        k = 0;

                        // 
                        dataGridView1.Rows[row++].Cells[col].Value = temp_buf[k++];
        }}


Что я уже пробовал:

инициализатор поля не может ссылаться на нестатическое поле c#

OriginalGriff

Этот код вообще выглядит неправильно - могу ли я предложить вам отредактировать вопрос и повторно вставить фактический код, скопированный из VS, без ложных двойных кавычек и так далее?
Использование блока кода (в отредактированном виде) помогает сохранить форматирование, что помогает использовать его для чтения и определения того, что происходит...

Кроме того, пожалуйста, укажите фактическую строку, на которой отображается ошибка.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

1 Ответов

Рейтинг:
1

OriginalGriff

Этот код является неполным - он не содержит строки, которая вызывает ошибку.

Но... смысл довольно ясен:

field initializer cannot reference the nonstatic field

Он говорит о том, что вы не можете инициализировать значение поля уровня класса (или переменной), используя значение другого поля в том же классе. :
public class MyClass
    {
    int x = 666;
    int y = x;
    }
Если вы подумаете об этом, это имеет смысл: что, если компилятор переместил инициализации? Если бы это было так - а это возможно, - то y было бы установлено в значение x до того, как x получил бы значение 666.

Как правило, для этого нет "исправления", скорее всего, если вам действительно нужно это сделать, то обе инициализации принадлежат конструктору класса:
public class MyClass
    {
    int x;
    int y;
    public MyClass()
        {
        x = 666;
        y = x;
        }
    }