相关疑难解决方法(0)

枚举和属性命名冲突

使用具有枚举属性的类时,通常会在属性名称和枚举类型之间产生命名冲突.例:

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等?

.net c#

42
推荐指数
2
解决办法
9922
查看次数

C#编译器是否使用const类型成员获取Color Color规则?

好的,所以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)

c# language-lawyer member-access

37
推荐指数
2
解决办法
1334
查看次数

const Enum 的最佳实践命名约定避免循环定义

这是一个重复的问题,但没有真正的解决方案。

那么我们开始吧。可以说我有:

public enum Color
{
    Red,
    Blue,
    Green
}

public class BlueUnicorn
{
    private const Color Color = Color.Blue;
}
Run Code Online (Sandbox Code Playgroud)
  1. “大多数枚举类型使用单数名称,但对于位字段的枚举类型使用复数名称。” 取自Microsoft 的枚举类型命名指南 检查!

  2. “考虑为属性指定与其类型相同的名称。” 从Microsoft 的类型成员名称 检查中检索!

  3. 根据 Resharper 的说法,我应该使用常量而不是只读在此输入图像描述查看!

但我收到编译器错误。但这很奇怪,没有智能感知。“BlueUnicorn.Color”常量值的计算涉及循环定义。

我感觉自己正处于一场会议的间隙。根据最佳实践命名约定,该字段应该命名为什么?

c# enums naming-conventions

5
推荐指数
1
解决办法
1679
查看次数