В выражении присутствует избыточное использование оператора 'as' или 'is'. Нет смысла приводить объект к собственному типу или выполнять проверку на совместимость с ним же. Часто данный код просто является избыточным, но порой подобные ситуации могут свидетельствовать о наличии ошибки в коде.
Для того, чтобы лучше понять, о чём речь, рассмотрим несколько примеров.
Искусственный пример:
public void SomeMethod(String str)
{
var localStr = str as String;
....
}
При инициализации переменной 'localStr' выполняется явное приведение объекта 'str' к типу 'String' при том, что явное приведение с использованием оператора 'as' избыточно, так как 'str' уже является объектом типа 'String'.
Тогда упрощённый код мог бы выглядеть так:
public void SomeMethod(String str)
{
String localStr = str;
....
}
Вместо явного указания типа объекта 'localStr' можно было бы оставить ключевое слово 'var', но явное указание типа добавляет ясности программе.
Рассмотрим более интересный пример:
public object FindName(string name, FrameworkElement templatedParent);
....
lineArrow = (Grid)Template.FindName("lineArrow", this) as Grid;
if (lineArrow != null);
....
Рассмотрим строку с приведениями более внимательно и проследим, что происходит:
Если посмотреть на следующую строку, видно, что предполагается, что 'lineArrow' может иметь значение 'null', следовательно, подразумевается именно использование оператора 'as'. Как объяснялось выше, 'lineArrow' не может принять значение 'null' в случае неудачного приведения. Следовательно, это не просто избыточное приведение, а явная ошибка.
Решением может послужить удаление лишней операции приведения из кода:
lineArrow = Template.FindName("lineArrow", this) as Grid;
if (lineArrow != null);
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3051. |