.net 枚举中的特殊成员:全部和无

.net 枚举中的特殊成员:全部和无,.net,enums,.net,Enums,可能重复: 有点主观 我有一个枚举 public enum Faction { Aliance, Horde } 正如我们都知道的那样,对业务领域进行密切建模的代码“总是更好”。 在给定的域中有两个派系,这两个派系在上面的集合中列举 问题:在上面的enum中包括特殊成员(如:无、全部)的支持和反对理由是什么 就我个人而言,我认为这两个派别不属于那里,因为那里没有“所有”和“没有”这样的派别。此外,使用标志枚举也不合适 解决方法是使用另一个enum,该enum将模拟与某个派系的

可能重复:

有点主观

我有一个枚举

public enum Faction {
    Aliance,
    Horde
}
正如我们都知道的那样,对业务领域进行密切建模的代码“总是更好”。 在给定的域中有两个派系,这两个派系在上面的集合中列举

问题:在上面的
enum
中包括特殊成员(如:无、全部)的支持和反对理由是什么

就我个人而言,我认为这两个派别不属于那里,因为那里没有“所有”和“没有”这样的派别。此外,使用标志枚举也不合适

解决方法是使用另一个enum,该enum将模拟与某个派系的从属关系,在这种情况下,适合在其中包含All和None等元素

问题#2:为了模型的公正性,我是否应该创建派系从属枚举?或者我是否应该省去额外的输入,并将派系枚举视为派系从属关系


编辑:复制的我从更实际的角度看待使用,而不是从纯粹的OO设计

是否有地方你将使用一个派系/派系亲和,在那里所有或没有都是不允许的;你绝对必须有一个阵营被宣布

如果是这样,那么应该使用两个单独的枚举


如果不是——如果你在任何地方使用一个阵营,“全部”和“无”都是可行的选择,那么就只使用一个,你可以随意称呼它。

我从一个更实际的角度来看待它的使用,而不是从纯OO设计的角度

是否有地方你将使用一个派系/派系亲和,在那里所有或没有都是不允许的;你绝对必须有一个阵营被宣布

如果是这样,那么应该使用两个单独的枚举


如果不是——如果你在任何地方使用一个派系,“全部”和“无”都是可行的选择,那么就只使用一个,你可以随意称呼它。

我会避免“全部”和“无”。给一个人,说:那个人可能属于一个派别。因此,要回答“此人属于哪个派别?”的问题,我们可以简单地(说)读取此人的派别字段。但是对于所有人的特殊情况,属于(比如)部落的人也将属于所有人-即使该人的派系场!=全部的这改变了IN的含义,导致了复杂的代码和微妙错误的风险。

我会避免所有和所有。给一个人,说:那个人可能属于一个派别。因此,要回答“此人属于哪个派别?”的问题,我们可以简单地(说)读取此人的派别字段。但是对于所有人的特殊情况,属于(比如)部落的人也将属于所有人-即使该人的派系场!=全部的这改变了IN的含义,导致了复杂的代码和细微错误的风险。

All
None
在处理打算用作位字段的枚举时(应该标记
[Flags]
)。在这种情况下,第一个标志的值应为1,第二个标志的值应为2。然后,
None
可以采用默认值0,表示没有派别从属关系。
All
成员是可选的,因为它可以通过应用位或其他两个标志来形成。标志枚举通常有一个复数名称,如
派系隶属关系

如果不处理标志,通常最好不要包含
None
值。你的大多数程序不需要这个,所以这是一个特殊情况,你不需要测试。如果您需要这个代码>没有< /COD>值,请考虑使用枚举的可空版本来代替:<代码>派系> <代码>。与
None
枚举器相比,可空枚举更好地表示没有值


我假设您的代码是C#,但大多数建议应该用其他语言表达。

所有
在处理打算用作位字段的枚举时(您应该标记
[Flags]
)。在这种情况下,第一个标志的值应为1,第二个标志的值应为2。然后,
None
可以采用默认值0,表示没有派别从属关系。
All
成员是可选的,因为它可以通过应用位或其他两个标志来形成。标志枚举通常有一个复数名称,如
派系隶属关系

如果不处理标志,通常最好不要包含
None
值。你的大多数程序不需要这个,所以这是一个特殊情况,你不需要测试。如果您需要这个代码>没有< /COD>值,请考虑使用枚举的可空版本来代替:<代码>派系> <代码>。与
None
枚举器相比,可空枚举更好地表示没有值


我假设您的代码是C#,但大多数建议应该用其他语言表达。

我认为您的实现应该得到改进。
您正在使用枚举对简单的布尔状态建模。
完全去掉枚举并用布尔属性替换它:“IsAlliance”或“IsHorde”,以两者中的任意一个为准。
枚举是多种可能性的模型,您没有多种可能性。

我认为您的实现应该改进。
您正在使用枚举对简单的布尔状态建模。
完全去掉枚举并用布尔属性替换它:“IsAlliance”或“IsHorde”,以两者中的任意一个为准。
枚举是多种可能性的模型,您没有多种可能性。

回答得好,+1。两个现实的例子:model.character派系=(派系[])Enum.GetValues(typeof(派系));character.partition=DB.getCharPartition(character=>character.Id==cId);回答得好,+1。两个现实的例子:model.characterAction=(派系[])Enum.GetValues(typeof(