Подтвердить что ты не робот

Почему ссылка на поле не разрешена в перечислении (или это ошибка компилятора?)

Когда я использую следующий код:

using System;

namespace Foo {

    [Flags]
    public enum Bar : ulong {
        None          = 0x0000000000000000,
        A             = 0x8000000000000000,
        B             = 0x0000000000000001L | A,
        C             = 0x0000000000000002L | B,
        D             = 0x0000000000000004L | A,
        All           = A | B | C | D
    }
}

Моно компилятор сработает. Это связано с семантической ошибкой (что-то, что не допускается на языке), но не замечено компилятором или это ошибка компилятора?

Версия: Mono 2.10.8.1

Я отправил отчет об ошибке в bugzilla (https://bugzilla.xamarin.com/show_bug.cgi?id=15801)

4b9b3361

Ответ 1

Из спецификации языка С#, раздел 14.3:

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

Итак, ваш код должен быть правильным (как уже было предложено в комментариях), и, следовательно, он должен быть ошибкой компилятора.