Почему компилятор говорит, что поле никогда не используется, когда оно используется?

В погоне за совершенством, чтобы поймать дерзость (перефразируя Винса Ломбарди), я попытался избавить проект от его единственного предупреждения, которым было: c:\project\nrps\PoisonFoot\releases\6-4-0\hhs\frmPlatypus .cs(103,16): предупреждение CS0169: личное поле "PDQClient.frmPlatypus.scanned" никогда не используется

Поэтому я закомментировал эту строку:

private bool scanned = false;

... но потом я получил:

C:\Project\nrps\PoisonFoot\Releases\6-4-0\HHS\frmPlatypus.cs(3390): Имя "отсканировано" не существует в классе или пространстве имен "PDQClient.frmPlatypus"

... в двух местах (в том же классе, где он предположительно излишне определен)

Как мне удалось обмануть компилятор, даже не попытавшись? Как я могу избавиться от предупреждения, не получая ошибки?


person B. Clay Shannon    schedule 28.05.2014    source источник
comment
Какие места в коде вызвали вторую ошибку?   -  person Yuriy Galanter    schedule 29.05.2014
comment
Вы используете #if возможно?   -  person CSharpie    schedule 29.05.2014
comment
Стремление к совершенству... так что обновите версию Visual Studio... вы отстали на 10 лет. :)   -  person gdoron is supporting Monica    schedule 29.05.2014
comment
-Show- Прочитайте строки, на которые компилятор жалуется. scanned назначается там, но больше никогда не читается.   -  person CodeCaster    schedule 29.05.2014
comment
Если бы я только мог - мы застряли здесь в дни пещерного человека...   -  person B. Clay Shannon    schedule 29.05.2014
comment
Горе этим сверхбыстрым близким избирателям. Информации было достаточно, чтобы найти ответ, и я многому научился!!   -  person TaW    schedule 29.05.2014


Ответы (1)


Когда csc (компилятор C#) говорит, что поле никогда не используется, на самом деле это означает, что вы никогда не читаете из поля. Если вы записываете только в закрытое поле-член, компилятор делает вывод, что это поле избыточно. Итак, я предполагаю, что в строке 3390 из frmPlatypus.cs вы назначаете сканирование, а не читаете из него, и поэтому компилятор жалуется.

Также - строка 3390? Действительно?

person Idan Arye    schedule 28.05.2014
comment
+1 за Также - строка 3390? Правда?. Кстати, я видел худшее... - person gdoron is supporting Monica; 29.05.2014
comment
Не лишнее, а неактуальное. Его назначение может даже отсутствовать в IL. - person Cᴏʀʏ; 29.05.2014
comment
Что вы подразумеваете под строкой 3390? Действительно? Я работал с файлами, в которых строк было на порядок больше. На самом деле, я видел МЕТОДЫ с таким количеством строк (и я никогда не видел кода Health.gov). - person B. Clay Shannon; 29.05.2014
comment
Я избавился от ВСЕГО кода, ссылающегося на это поле — в одном месте ему было присвоено значение true, а в другом — false, но эти состояния никогда не влияли ни на что другое. - person B. Clay Shannon; 29.05.2014
comment
Судя по названию, это класс формы, если он использует конструктор форм, 3390 строк на самом деле не так уж и много... - person Middas; 29.05.2014
comment
Ага, коты тут перед завтраком пишут 3390 LOC. - person B. Clay Shannon; 29.05.2014