使用具有枚举属性的类时,通常会在属性名称和枚举类型之间产生命名冲突.例:
enum Day{ Monday, Tuesday, ... }
class MyDateClass
{
private Day day;
public Day Day{ get{ return day; } }
}
Run Code Online (Sandbox Code Playgroud)
由于只有标志枚举应具有多个名称,因此将枚举"Days"命名为非标记枚举的方式.在上面的示例中,您可以对枚举或属性使用"WeekDay"之类的变体.但是在一般情况下没有像这样的好的变化,所以你最终使用像"FooMode"或"BarKind"这样的属性来获得具有Foo和Bar类型的枚举属性的对象.不那么优雅.
在这种情况下,您通常如何命名枚举和属性?
感谢您的快速回复.另一个问题:为什么不建议嵌套公共枚举,如果要嵌套公共枚举,如何解决命名问题?
class Vehicle
{
enum Kind{ Car, Bike }
public Kind Kind{ get{ return ... } }
}
class Meal
{
enum Kind{ Dessert, MainCourse }
public Kind Kind{ get{ return ... } }
}
Run Code Online (Sandbox Code Playgroud)
在上面的场景中,假设Meal和Vehicle共享相同的命名空间,我不能在其中任何一个类之外移动"Kind"而不分别将它重命名为MealKind和VehicleKind.我喜欢这个样子
myVehicle.Kind = Vehicle.Kind.Car
Run Code Online (Sandbox Code Playgroud)
但这不是guidlines推荐的内容.这里最好的做法是什么?永远不要使用嵌套的公共枚举,而是将它们命名为VehicleKind等?
好的,所以C#语言规范在规则上有一个特殊的部分(旧版链接),Color Color其中一个成员及其类型具有相同的名称.着名的大师Eric Lippert 曾在博客上发表过这篇文章.
我在这里要问的问题在某种意义上(不是)与常量枚举中的线程循环定义中提出的完全相同.如果你愿意,你可以去推荐其他问题.
现在我的问题.考虑以下代码:
namespace N
{
public enum Color
{
Green,
Brown,
Purple,
}
public class C1
{
public const Color Color = Color.Brown; // error CS0110 - WHY? Compiler confused by Color Color?
}
public class C2
{
public static readonly Color Color = Color.Brown; // fine
}
public class C3
{
public static Color Color = Color.Brown; // fine
}
public class C4
{
public Color …Run Code Online (Sandbox Code Playgroud) 这是一个重复的问题,但没有真正的解决方案。
那么我们开始吧。可以说我有:
public enum Color
{
Red,
Blue,
Green
}
public class BlueUnicorn
{
private const Color Color = Color.Blue;
}
Run Code Online (Sandbox Code Playgroud)
“大多数枚举类型使用单数名称,但对于位字段的枚举类型使用复数名称。” 取自Microsoft 的枚举类型命名指南 检查!
“考虑为属性指定与其类型相同的名称。” 从Microsoft 的类型成员名称 检查中检索!
根据 Resharper 的说法,我应该使用常量而不是只读
查看!
但我收到编译器错误。但这很奇怪,没有智能感知。“BlueUnicorn.Color”常量值的计算涉及循环定义。
我感觉自己正处于一场会议的间隙。根据最佳实践命名约定,该字段应该命名为什么?