为什么枚举中不允许字段引用(或者这是一个编译器错误?

本文关键字:一个 错误 编译器 枚举 不允许 字段 或者 引用 为什么 | 更新日期: 2023-09-27 18:37:26

当我使用以下代码时:

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
    }
}

单声道编译器崩溃。这是由于语义错误(语言中不允许的错误),但编译器没有注意到还是编译器错误?

版本: 单声道 2.10.8.1

我已经在 bugzilla (https://bugzilla.xamarin.com/show_bug.cgi?id=15801) 提交了错误报告

为什么枚举中不允许字段引用(或者这是一个编译器错误?

根据 C# 语言规范的第 14.3 节:

枚举成员

的关联值不能直接或间接使用其自己的关联枚举成员的值。除了此循环性限制之外,枚举成员初始值设定项可以自由引用其他枚举成员初始值设定项,而不管其文本位置如何。

所以你的代码应该是正确的(正如注释中已经建议的那样),因此它应该是一个编译器错误。

相关文章: