Можно ли предотвратить случайные побитовые операторы на поле без битовой маски? - PullRequest
5 голосов
/ 28 сентября 2011

В C # вам рекомендуется добавить атрибут [Flags] в перечисления битовой маски, например так:

[Flags]
public enum Condiments
{
    None = 0,
    Ketchup = 1,
    Mustard = 2,
    Mayo = 4,
    Pickle = 8,
    AllTheWay = 15
}

Я обнаружил, что у меня есть код, который ошибочно выполнял побитовые операции над перечислением без атрибута [Flags], который вообще не был битовой маской (First = 1, Second = 2, Third = 3 и т. Д.). Это, конечно, логически неправильно, но вполне приемлемо для компилятора.

Мне интересно, есть ли способ использовать атрибут [Flags] или какой-то другой подход, чтобы превратить это в ошибку / предупреждение во время компиляции. Я не знаю, с чего начать, но кажется, что это должно быть выполнимо, поэтому любая помощь будет оценена.

1 Ответ

1 голос
/ 28 сентября 2011

Я бы предложил для этих «пользовательских» проверок, когда компилятор не может определить проблему, используя http://research.microsoft.com/en-us/projects/contracts/. CodeContracts, если вы можете.

...