常量枚举中的循环定义

Mur*_*nze 16 c#

我正在尝试创建一个类型的常量Enum但是我得到一个错误..我的枚举是:

public enum ActivityStatus
{
    Open = 1,
    Close = 2
}
Run Code Online (Sandbox Code Playgroud)

我有一个使用它的模型:

public class CreateActivity
{
    public int Id;
    public const ActivityStatus ActivityStatus = ActivityStatus.Open;
}
Run Code Online (Sandbox Code Playgroud)

发生以下错误:

错误1"Help_Desk.Models.CreateActivity.ActivityStatus"常量值的评估涉及循环定义......

但是,如果我更改ActivityStatus属性的名称,它的工作原理!

public class CreateActivity
{
    public int Id;
    public const ActivityStatus AnyOtherName = ActivityStatus.Open;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

MiM*_*iMo 15

因为c#编译器解释了第三个ActivityStatus:

public const ActivityStatus ActivityStatus = ActivityStatus.Open; 
Run Code Online (Sandbox Code Playgroud)

作为定义的常量的名称而不是枚举的名称 - 因此循环引用:您根据常量本身定义常量.

在C#中,您可以对成员和类型使用相同的名称,并且通常解决指定完全限定名称的歧义(即添加命名空间),但根据我的经验,这不是一个好主意,它会使代码混乱:编译器可以弄清楚这是哪个,但是穷人阅读代码时很难确定某个名称是指某个类别或类型或成员.

  • 解决方案是将`ActivityStatus.Open`更改为`Namespace.ActivityStatus.Open` (2认同)
  • 所以,这是一个编译器错误? (2认同)
  • @Servy,我不确定所有人都同意http://stackoverflow.com/questions/211567/enum-and-property-naming-conflicts (2认同)
  • @Servy:我不同意.有足够的样本.没有麻烦的迹象. (2认同)