相关疑难解决方法(0)

枚举和匹配属性的C#命名约定

我经常发现自己实现了一个类来维护某种自己的状态属性作为枚举:我有状态类型的状态枚举和状态属性.我该如何解决这个名称冲突?

public class Car
{
  public enum Status
  {
    Off,
    Starting,
    Moving
  };

  Status status = Status.Off;

  public Status Status // <===== Won't compile =====
  {
    get { return status; }
    set { status = value; DoSomething(); }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果Status enum对于不同的类型是通用的,我会把它放在课外,问题就会解决.但Status仅适用于Car,因此在类外声明枚举是没有意义的.

在这种情况下你使用什么命名约定?

注意:在回答这个问题的评论中,对这个问题进行了部分辩论.由于这不是主要问题,因此没有太多可见性.

编辑:Filip Ekberg建议IMO针对"状态"的具体案例提供出色的解决方法.然而,我很有兴趣阅读关于枚举/属性名称不同的解决方案,如Michael Prewecki的回答.

EDIT2(2010年5月):我最喜欢的解决方案是按照Chris S的建议复数枚举类型名称.根据MS指南,这应该仅用于标记枚举.但我越来越喜欢它了.我现在也将它用于常规枚举.

.net c# enums naming-conventions

90
推荐指数
5
解决办法
5万
查看次数

嵌套枚举和属性命名冲突

这里这里有一些相关的问题,但它们并没有真正给我满意的答案.问题是嵌套在C#中的类的枚举不能与类的属性具有相同的名称.我的例子:

public class Card
{
    public enum Suit
    {
        Clubs,
        Diamonds,
        Spades,
        Hearts
    }

    public enum Rank
    {
        Two,
        Three,
        ...
        King,
        Ace
    }

    public Suit Suit { get; private set; }
    public Rank Rank { get; private set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

有一些选项可以解决这个问题,但它们对我来说似乎并不合适.

我可以在课堂外移动枚举,但是你只会说Suit而不是Card.Suit,这对我来说似乎不对.什么是Suit外界的背景Card

我可以移动它们的类外,并将其更改为类似CardSuitCardRank,但后来我觉得我在烤的上下文信息到枚举时,应该由一个类或命名空间名称进行处理的名称.

我可以改变枚举到的名字SuitsRanks,但是这违反了微软的命名规则.它感觉不对劲.

我可以更改属性名称.但到了什么?我觉得直觉对我来说是对的Suit = Card.Suit.Spades.

我可以将枚举移动到一个单独的静态类中,该类CardInfo只包含这些枚举.如果我不能提出任何其他建议,我认为这是最好的选择.

所以我想知道其他人在类似的情况下做了什么.知道为什么不允许这样做也很好.也许埃里克·利珀特(Eric Lippert)或其他人可能会决定禁止它?它似乎只会类中产生歧义,这可以通过强制使用this.Suit …

.net c# enums

29
推荐指数
2
解决办法
4593
查看次数

常量枚举中的循环定义

我正在尝试创建一个类型的常量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)

为什么会这样?

c#

16
推荐指数
1
解决办法
1972
查看次数

C#Enum VS Nullable属性名称冲突

关于Enum VS Property名称冲突有这个,这个这个问题.

我的问题不是关于命名约定,而是我想知道如何解决下面代码中演示的名称冲突:

namespace Test
{
    public class Person
    {
        // 1)
        // Gender? Gender { get; set; }

        // 2)
        Gender Gender { get; set; }

        public Person ()
        {
            // 1 - Error CS1061: Type `Test.Gender?' does not contain a definition for `Male' and no extension method `Male' of type `Test.Gender?' could be found (are you missing a using directive or an assembly reference?) (CS1061) (Test)
            // 2 - OK
            Gender …
Run Code Online (Sandbox Code Playgroud)

.net c# enums naming nullable

3
推荐指数
1
解决办法
455
查看次数

标签 统计

c# ×4

.net ×3

enums ×3

naming ×1

naming-conventions ×1

nullable ×1