После прочтения недавнего вопроса Операции между различными типами перечислений разрешены в другом объявлении перечисления, но не в другом месте. Я придумал этот пример. :
enum Alpha : long
{
X,
}
enum Beta : ulong
{
X,
}
enum Gamma : long
{
X = Alpha.X | Beta.X, // problem?
}
enum Delta : ulong
{
X = Alpha.X | Beta.X, // no problem?
}
Результат компиляции: Gamma
не компилируется (CS0266: Невозможно неявно преобразовать тип 'ulong' в 'long'. Существует явное преобразование (вам не хватает приведения?)). Delta
успешно компилируется.
Разве этого не следует ожидать от Спецификации языка C#?
(Примечание: если я изменю член Alpha
, чтобы он был инициализирован отрицательной константой, такой как -1L
, то ни Gamma
, ни Delta
не будут компилироваться.)