枚举二传手和吸气鬼

时间:2017-05-29 16:46:39

标签: c# enums getter-setter

我今天可以使用以下构造(不编译)

public enum RecordedOrPlayed
{
    None {get,private set}
    Recorded,
    Played
}
enum SoundStatus = SoundStatus.None

这会有用吗?

编辑 - 回应备注

说明:

我想要一种具有无法使用的第一次值的方法。我有一个Sound类,它在创建时什么也没做。 Sound根据其状态做了不同的事情。该类可能被其他程序员使用。一旦它录制或播放它就永远不会返回到无。当不是一个选项时,我不希望intellisense提示None。从C#7开始,我们可以为属性

做到这一点
public string str {get; private set;} = "First time only";

我意识到可以用类似的东西来完成......

    public RecordedOrPlayed recordedOrPlayed
    {
        get { return _recordedOrPlayed; }
        set
        {
            if (value == RecordedOrPlayed.None)
                throw new ArgumentException("yada yada");
            _recordedOrPlayed = value;
        }
    } 

...但它很丑陋,一眼就难以掌握,添加了另一个变量,需要10行代码来替换setter。

2 个答案:

答案 0 :(得分:1)

截至20分钟有8个downvotes所以我认为这个问题不是由我回答,而是由民意回答。这可能不会被纳入C#8

此问题和另一个问题导致我被禁止提出进一步的问题。我意识到这是我同行的陪审团,但我不认为这个问题如此令人发指,以至于它保证了这种惩罚

答案 1 :(得分:0)

  

枚举只是带有标签的常量整数值...

所以

public enum RecordedOrPlayed
{
    None,
    Recorded,
    Played
}

最终会编译为

public const int RecordedOrPlayed_None = 0;
public const int RecordedOrPlayed_Recorded = 1;
public const int RecordedOrPlayed_Played = 2;

您试图通过使用实现的目标,永远不会编译为您与getter和setter所讨论的行为,因为它根本不是针对enums设计的。

这种严重的误解是你所有的选票来自哪里。

  

你提议的是隐藏智能感知的enum,这相当于说,隐藏public const ......你可以看出人们为什么不理解你的问题。< / p>