2016-04-12 1 views
-2

Для моей задачи я просто обновляю существующую функциональность в файле cs, а еще один новый флаг отслеживает отправку почтовой функции. Текущая функция,Управляющий поток не попадает в объявление переменной

public static string EditDetails(AccountDetails Account, string[] existingAccount) 
{ 
    // some code goes here 

    var enableNewWelcomeMail = true; // control not getting here.. 
    var isAccountUpdated = true; 
    var isMailSent = true; 

    if (Account.ContractType == ContractType.Licensed) // even though condition true value is not assigned to false 
    { 
     enableNewWelcomeMail = false; 
    } 
    // remaining code goes here 
} 

После добавления нового переменного флага я очищенный проект и построил его. Даже сейчас элемент управления просто пропускает объявление переменной. Во время чистки и сборки проекта я заметил одно предупреждающее сообщение, как

предупреждения CS0219: Переменная «enableNewWelcomeMail» присваивается, но его значение не используется

Для некоторых других переменных также я вижу это но они работают только отлично. Любое предложение относительно этого было бы действительно полезно.

+0

Где заявляется ExistingAccout? Вероятно, BTW должен быть ExistingAccount. Если код не попадает в объявление переменной, то он, вероятно, выходит или получает исключение в части, которую вы обозначили как «какой-то код здесь» –

+0

Что такое 'ExistingAccout' здесь?? –

+0

Существующий аккаунт, который означает уже учетную запись, которая также лицензирована. –

ответ

2

Прежде всего предупреждение означает именно то, что он говорит. Она является частью статического анализа кода и должен помочь вам с кодировкой двумя способами:

  1. Оптимизация и очистка кода быть удаление неиспользуемого кода
  2. пятна ошибок. Представьте, что вы действительно хотели использовать начальное значение, но забыли сделать это. В этом случае предупреждение покажет, что что-то пошло не так.

Вы назначаете значение переменной, которая никогда не используется. Посмотрите на следующий пример:

var valueUnused = false; 
valueUnused = true; 
valueUnused = false; 

Вы видите три задания, но 2 из значений не используются, прежде чем они будут перезаписаны. Если бы вы использовали значение с блоком if (valueUnused), предупреждение исчезнет. Можно даже сделать что-то вроде этого:

var valueUnused = false; 
valueUnused = !valueUnused; 
valueUnused = !valueUnused; 

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

1

Во-первых, этот тип предупреждения выдается, когда компилятор обнаруживает, что второе присваивание переменной всегда переписывает значение первого присваивания (посредством анализа статического кода).

Это означает, что ваше утверждение if всегда верно.

Это причина вашего предупреждения. Это не значит, что вы думаете.

if (Account.ContractType == ContractType.Licensed) 
// your if-condition is always true, that is why this warning is displayed 
{ 
    enableNewWelcomeMail = false; 
} 

enableNewWelcomeMail всегда будет ложным, это ваше условие if. Это то, что разъясняет предупреждение.

Смежные вопросы