枚举类型可以从接口派生



我的类中有三个枚举

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提供一个命名列表比您处理问题的另一种方式更合乎逻辑。

最新更新