Короче говоря: я нахожу Java antipatterns незаменимым ресурсом. Для новичков, как и для профессионалов. Мне еще нужно найти что-то подобное для С#. Поэтому я открою этот вопрос в качестве вики сообщества и приглашаю всех поделиться своими знаниями об этом. Поскольку я новичок в С#, я сильно заинтересован в этом, но не могу начать с некоторых antipatterns:/
Вот ответы, которые я нахожу специально для С#, а не других языков.
Я просто копировал/вставлял их! Подумайте о том, чтобы бросить взгляд на комментарии к ним.
Бросок NullReferenceException
Выброс неправильного исключения:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Свойства и общедоступные переменные
Открытые переменные в классах (вместо этого используйте свойство).
Если класс не является простым объектом передачи данных.
Не понимая, что bool - это реальный тип, а не только соглашение
if (myBooleanVariable == true)
{
...
}
или, даже лучше
if (myBooleanVariable != false)
{
...
}
Такие конструкции часто используются разработчиками C
и C++
, где идея логического значения была просто условным (0 == false, все остальное верно); это необязательно (или желательно) на С# или на других языках, имеющих реальные булевы.
Использование 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.