# V3196. Parameter is not utilized inside the method body, but an identifier with a similar name is used inside the same method.

Анализатор обнаружил подозрительный код, в котором один из параметров никак не используется. При этом в теле функции/конструктора используется значение переменной, поля или свойства с похожим названием. Возможно, это значение было по ошибке использовано вместо значения параметра метода.

Рассмотрим пример:

    public GridAnswerData(int questionId, ....)
    {
      this.QuestionId = QuestionId;
      ....
    }

В данном конструкторе свойству присваивается собственное же значение. Очевидно, что это опечатка, и свойству 'this.QuestionId' должно быть присвоено значение параметра 'questionId'. В результате решение проблемы выглядит следующим образом:

    public GridAnswerData(int questionId, ....)
    {
        this.QuestionId = questionId;
        ....
    }

Рассмотрим ещё один пример:

    public async void Save(string filePath = null)
    {
      using(var writer = new StreamWriter(FilePath))
      {
        ....
        await writer.WriteAsync(Data);
      }
    }

В данном случае в метод 'Save' в качества аргумента 'filePath' передаётся путь к файлу, в который должны быть сохранены какие-то данные. Однако вместо этого сохранение выполняется в другой файл, путь к которому возвращает свойство 'FilePath'. Можно предположить, что свойство 'FilePath' должно быть использовано только в случае, если аргумент 'filePath' имеет значение 'null'. В итоге исправленный код может выглядеть следующим образом:

    public async void Save(string filePath = null)
    {
      var path = filePath ?? FilePath;
      using(var writer = new StreamWriter(path))
      {
        ....
        await writer.WriteAsync(Data);
      }
    }

Даже если это предположение ошибочно, наличие неиспользуемого параметра в сигнатуре метода может запутать и потенциально привести к ошибкам при использовании этого метода в будущем.