我正在尝试创建Enum
类型的常量但是我收到错误..
我的枚举是:
public enum ActivityStatus
{
Open = 1,
Close = 2
}
我有一个使用它的模型:
public class CreateActivity
{
public int Id;
public const ActivityStatus ActivityStatus = ActivityStatus.Open;
}
发生以下错误:
错误1评估'Help_Desk.Models.CreateActivity.ActivityStatus'的常量值涉及循环定义......
但是如果我更改ActivityStatus
属性的名称就可以了!
public class CreateActivity
{
public int Id;
public const ActivityStatus AnyOtherName = ActivityStatus.Open;
}
为什么会这样?
答案 0 :(得分:15)
因为c#编译器解释了第三个ActivityStatus
:
public const ActivityStatus ActivityStatus = ActivityStatus.Open;
作为定义的常量的名称而不是枚举的名称 - 因此循环引用:您根据常量本身定义常量。
在C#中,您可以对成员和类型使用相同的名称,并且通常解决指定完全限定名称的歧义(即添加命名空间),但根据我的经验,这不是一个好主意,它会使代码混乱:编译器可以弄清楚哪个是哪个,但是穷人阅读代码时很难确定某个名称是指一个类或类型或成员。
答案 1 :(得分:2)
您不应创建具有相同名称或枚举的变量。
如果您指定名称空间,它可能会起作用,例如:
public class CreateActivity
{
public int Id;
public const TheNamespace.ActivityStatus ActivityStatus =
TheNamespace.ActivityStatus.ActivityStatus.Open;
}
答案 2 :(得分:0)
如果仅限私人使用:您可以将ActivityStatus更改为只读字段,并将默认值的设置移动到构造函数。
如果公开使用:您可以仅使用带有getter的属性。
在大多数代码分析器中,额外的命名空间将被视为代码中的冗余。
答案 3 :(得分:0)
为避免C#中的循环定义问题,您可以使用全限定名称(如
)引用/调用变量/类型/成员等。Namespace..Member/Type/ etc
希望您现在可以解决该错误。