Подтвердить что ты не робот

Возможное непреднамеренное сравнение ссылок

У меня есть следующий код, который дает предупреждение

Возможное непреднамеренное сравнение ссылок; чтобы получить сравнение значений, введите левую сторону, чтобы ввести "string"

if (lblStatus.Content == "ACTIVE")
{
  //Do stuff
}
else
{
  //Do other Stuff
}

Я предполагаю, что предупреждение состоит в том, что lblStatus.Content может не всегда иметь строку типа?

Я попытался исправить это, используя каждое из следующих, но я все еще получаю предупреждение

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")

Пожалуйста, может кто-нибудь объяснить причину, по которой я все еще получаю предупреждение и лучший практический способ справиться с этим?

4b9b3361

Ответ 1

Предупреждение связано с тем, что тип lblStatus.Content времени компиляции object. Поэтому перегрузка оператора выбирает перегрузку ==(object, object), которая является просто сопоставлением ссылочного идентификатора. Это не имеет никакого отношения к типу значения времени выполнения.

Первая или вторая из ваших опций должна была зафиксировать предупреждение, хотя:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")

Обратите внимание, что первый из них генерирует исключение, если lblStatus.Content имеет значение null. Я бы предпочел вторую форму.

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

Ответ 2

Я предпочитаю придерживаться метода string.Equals(string,string,StringComparison), как показано ниже:

    string contentStr = (lblStatus.Content ?? string.Empty).ToString();
    if (string.Equals("ACTIVE", contentStr, StringComparison.OrdinalIgnoreCase))
    { 
        // stuff
    } 

потому что он явно указывает, что он делает +, он не дает предупреждения, о котором вы упомянули.

Ответ 3

Восстановите свой проект после исправления кода следующим образом:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")