我的类中有三个枚举
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 的属性类型。
如果这些是对象,我会从某个接口 ICPUType 派生它们,但在这种情况下(枚举)我被卡住了。
更新:让我解释一下此属性 SelectedType 的用法。
用户将从 CPUBrandEnum 中选择 cpu 品牌类型,根据该值,我将显示 CPUTypeAMD 的 CPUTypeIntel。
因此,基于该值,SelectedCPUType 可以是 CPUTypeXXX 枚举中的一个选择值。
不,枚举无法在 .NET 中实现接口。它们实际上只是命名的数字。
即使他们可以实现接口,您最终也有可能出现不良数据(例如"英特尔系列"。
无论如何,都不清楚你想用这些值做什么,但你可能只有一个具有所有有效可能性的枚举。当然,这可能不适用于您的真实情况。
不可以,您不能在枚举上实现接口。
你可以这样做:
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;
enum
无法实现接口。
如果您希望标记缺少枚举值,那么您有两个选择。一种是有一个名为 Unknown
(或类似的东西)的枚举成员。例如:
public enum CPUBrandEnum {
Unknown = 0,
Intel = 1,
AMD = 2
}
另一种是使用可为空的值:
public CPUBrandEnum? CPUBrand { get; set; }
我将有两个类型为 CPUTypeIntel 和 CPUTypeAMD 的属性,并且每个枚举的默认值为 None,例如 public enum CPUInteltype {None, Celeron, Pentium4}
然后,您可以稍后测试这些属性,并且仅在值不是 None 时才起作用。
与其创建两个枚举,不如创建一个枚举,CPUTye
public enum CPUTypeIntel
{
Celeron,
Pentium4,
ASeries,
ESeries
}
enum
在.NET中无法实现接口,而且enum
只是一个由一组命名常量组成的不同类型。
编辑我不明白为什么当性质和定义几乎相同时,您为什么要尝试使用两种enum
。两者都代表CPUType
并且为所有CPUType
提供一个命名列表比您处理问题的另一种方式更合乎逻辑。