我班上有三个枚举
public enum CPUBrandEnum {
Intel = 1,
AMD = 2
}
和
public enum CPUTypeIntel {
Celeron,
Pentium4
}
public enum CPUTypeAMD {
ASeries,
ESeries
}
所以我拥有持有cpu品牌的财产
public CPUBrandEnum CPUBrand { get; set; }
public SelectedCPUType ???
但由于我不知道用户在运行时将选择哪种cpu类型,我不知道如何构造将保留选择cpu的propertytype。
如果那些是对象,我会从一些接口ICPUType派生它们,但在这种情况下(枚举)我卡住了。
更新: 让我解释一下这个属性SelectedType的用法。
用户将从CPUBrandEnum中选择cpu品牌类型,根据该值我将显示CPUTypeAMD的CPUTypeIntel。
因此,根据该值,SelectedCPUType可以是CPUTypeXXX枚举中的一个选择值。
答案 0 :(得分:10)
不,枚举无法在.NET中实现接口。他们真的只是命名数字。
即使他们可能实现接口,您最终也可能会遇到不良数据(例如“Intel ASeries”。
目前还不清楚你想对这些值做什么,但是你可能只需要一个包含所有有效可能性的枚举。当然,这可能对您的真实情况不起作用。
答案 1 :(得分:2)
不,你不能在枚举上实现接口。
你可以这样做:
enum CPU
{
IntelCeleron,
IntelPentium,
AmdASeries,
AmdESeries
}
此方法允许您根据此枚举中存在的值选择CPU,或者您可以使用[System.Flags]
[System.Flags]
enum CPU
{
Intel = 1,
Amd = 2,
Celeron = 4,
Pentium = 8,
ASeries = 16,
ESeries = 32
}
这将允许您组合这样的值
var cpu = CPU.Intel | CPU.Pentium;
但它也打开了不正确的值,比如
var cpu = CPU.Amd | CPU.Pentium;
答案 2 :(得分:1)
enum
无法实现接口。
如果你想要标记没有枚举值,那么你有两个选择。一个是有一个名为Unknown
的枚举成员(或类似的东西)。例如:
public enum CPUBrandEnum {
Unknown = 0,
Intel = 1,
AMD = 2
}
另一种是使用可以为空的值:
public CPUBrandEnum? CPUBrand { get; set; }
答案 3 :(得分:1)
我将拥有CPUTypeIntel和CPUTypeAMD类型的两个属性,并且每个枚举的默认值为None,例如public enum CPUInteltype {None, Celeron, Pentium4}
然后您可以稍后测试这些属性,只有在值不是None时才能工作。
答案 4 :(得分:1)
而是创建两个枚举,只需创建一个枚举CPUTye
public enum CPUTypeIntel
{
Celeron,
Pentium4,
ASeries,
ESeries
}
.NET中的 enum
无法实现接口,而且enum
只是一个由一组命名常量组成的不同类型。
编辑我不明白为什么当性质和定义几乎相同时,你试图拥有两个enum
。两者都代表CPUType
并且对于所有CPUType
都有一个命名列表,这比你解决问题的方式更合乎逻辑。