Короче говоря: я считаю антипаттернов Java незаменимым ресурсом. Как для новичков, так и для профессионалов. Мне еще предстоит найти что-то подобное для C #. Итак, я открою этот вопрос как вики сообщества и приглашаю всех поделиться своими знаниями по этому поводу. Поскольку я новичок в C #, меня это сильно интересует, но я не могу начать с некоторых антипаттернов: /
Вот ответы, которые я считаю верными для C #, а не для других языков.
Я просто скопировал / вставил их! Также подумайте о комментариях к ним.
Бросок NullReferenceException
Выбрасывание неправильного исключения:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Свойства и общедоступные переменные
Открытые переменные в классах (вместо этого используйте свойство).
Если класс не является простым объектом передачи данных.
Непонимание того, что bool - это реальный тип, а не просто соглашение
if (myBooleanVariable == true)
{
...
}
или, что еще лучше
if (myBooleanVariable != false)
{
...
}
Подобные конструкции часто используются C
и C++
разработчиками, где идея логического значения была просто условностью (0 == ложь, все остальное верно); в C # или других языках с настоящими логическими значениями это не обязательно (или нежелательно).
Использование using()
Не использовать using
там, где это необходимо:
object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close. Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away. 2. C# is GC so this doesn't do what was intended anyway.