我今天可以使用以下构造(不编译)
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。
答案 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>