Почему нет предупреждения о назначении личности? - PullRequest
7 голосов
/ 15 мая 2011

Я совершал эту ошибку несколько раз - это происходит, когда я работаю быстро и использую завершение кода.В итоге я получаю код, подобный следующему:

public class Model : IModel
{
    public PropertyNames PropertyNames { get; set; }
    public Model(PropertyNames propertyNames)
    {
        PropertyNames = PropertyNames;
    }
}

Затем тест не проходит несколько менее очевидным образом, и я срываюсь.

Мне просто любопытно, если естьвеская причина для написания такого кода, когда-либо, а если нет, то делает ли это хорошим кандидатом предупреждение?

Ответы [ 3 ]

6 голосов
/ 15 мая 2011

Мне просто любопытно, есть ли веская причина для написания такого кода, когда-либо

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

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

Редактировать:

Путем сравнения, если идентификаторявляется полем , а не свойством , оно генерирует это предупреждение:

предупреждение CS1717: присваивание той же переменной;Вы хотели назначить что-то еще?

3 голосов
/ 15 мая 2011

Используйте FxCop (он же Code Analysis), он выдаст вам предупреждение:

Предупреждение 3 CA1801: Microsoft.Usage: Параметр propertyNames из Model.Model (string) никогда не используется. Удалите параметр или используйте его в теле метода.

3 голосов
/ 15 мая 2011

Кроме «это считается действительной инструкцией», нет никаких оснований когда-либо использовать это. Тем не менее, это также не так: он соответствует синтаксису присваивания.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...