Могу ли я принудительно использовать ключевое слово this в c # .NET? - PullRequest
10 голосов
/ 18 августа 2011

Есть ли способ принудительного использования ключевого слова this в Visual Studio при обращении к текущим членам экземпляра?

Пример с ошибкой в ​​конструкторе:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        Foo = Foo; // this should of course be lowercase but it's easy to miss
    }
}

Этот код, вероятно, сгенерирует печально известное исключение 'object reference not set to an instance of an object' где-то позже.

Как заставить его работать, но все же его легко пропустить:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        Foo = foo; // Valid syntax but unclear.
    }
}

Это допустимый синтаксис, но его легко пропустить.

Синтаксис, который я хотел бы применить в Visual Studio:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        this.Foo = foo; // this is "safe". 
    }
}

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

В любом случае я всегда использую ключевое слово this, поскольку это облегчает мою жизнь при переключении между c # и другими языками, поэтомуне будет никаких недостатков.

Ответы [ 4 ]

11 голосов
/ 18 августа 2011

Это можно исправить, просто включив «Обрабатывать предупреждения как ошибки»:

Предупреждение 2 Назначение одной переменной;Вы хотели назначить что-то еще?

(CS1717, если вы хотите включить это только для этого)

Компилятор уже говорит вам об этом;Вы должны просматривать предупреждения (и стремиться к нулевым предупреждениям).

По среднему неясно:

Foo = foo;

Я не согласен - мне это совершенно ясно (если вы не приехалифон VB и разработал случай слепоты).

5 голосов
/ 18 августа 2011

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

Лично я не склонен терять слишком много сна из-за такого рода вещей, так как это обычно очевидно, как только вы тестируете - я могу вспомнить только один сценарий, когда это действительно укусил меня, что произошло, когда я закончил с переполнением стека (не совсем та же ситуация, но снова проблема с корпусом) в инициализаторе типов, работающем на Windows Phone 7 - смесь сложных отладочных сред, в основном.

3 голосов
/ 18 августа 2011

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

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

Это довольно хорошее решение, бесплатное, предоставляемое Microsoft, и если вы придумали подходящий набор правил, ваши разработчики создадут много"аккуратный" код.Вы также можете создавать собственные правила в соответствии с «Методы не должны быть слишком длинными», где вы определяете длину.Множество вещей, с которыми можно поиграть.

Также, я думаю, вы могли бы установить предупреждения как ошибки, но если вы убедитесь, что ваши настройки StyleCop точно такие, как вы хотите.

2 голосов
/ 18 августа 2011

Вы можете создавать собственные предупреждения и ошибки, используя FXCop \ Visual Studio Code Analysis

...