C# 枚举类型能否从接口派生

C# 枚举类型能否从接口派生,c#,.net,C#,.net,我班上有三个枚举 public enum CPUBrandEnum { Intel = 1, AMD = 2 } 及 所以我有持有cpu品牌的房产 public CPUBrandEnum CPUBrand { get; set; } public SelectedCPUType ??? 但是,由于我不知道用户在运行时将选择哪种cpu类型,我不知道如何构造包含choosen cpu的propertytype 如果这些是对象,我会从一些接口I

我班上有三个枚举

public enum CPUBrandEnum { 
   Intel = 1,
   AMD = 2                    
}

所以我有持有cpu品牌的房产

public CPUBrandEnum CPUBrand { get; set; }
public SelectedCPUType ???
但是,由于我不知道用户在运行时将选择哪种cpu类型,我不知道如何构造包含choosen cpu的propertytype

如果这些是对象,我会从一些接口ICPUType派生它们,但在这个例子中,enum我被卡住了

更新: 让我解释一下SelectedType属性的用法

用户将从CPUBrandEnum中选择cpu品牌类型,基于该值,我将显示CPUTypeIntel或CPUTypeAMD


因此,基于该值,SelectedCPUType可以是CPUTypeXXX枚举中的一个Selected值。

否,枚举无法在.NET中实现接口。它们实际上只是命名的数字

即使他们可以实现接口,最终也可能会出现坏数据,例如Intel ASeries

现在还不清楚您想用这些值做什么,但您可能只需要一个枚举,其中包含所有有效的可能性。当然,这可能不适合您的实际情况。

枚举无法实现接口

如果要标记不存在枚举值,则有两个选项。一种是有一个名为Unknown或类似的枚举成员。例如:

public enum CPUBrandEnum { 
   Unknown = 0,
   Intel = 1,
   AMD = 2                    
}
另一种方法是使用可为空的值:

public CPUBrandEnum? CPUBrand { get; set; }

我将有两个类型为CPUTypeIntel和CPUTypeAMD的属性,并且for each enum的默认值为None,例如public enum CPUInteltype{None,Celeron,Pentium4},然后您可以稍后测试这些属性,并且仅当值不是None时才工作。

与其创建两个enum,不如创建一个enum,CPUTye

NET中的enum不能实现接口,而且enum只是由一组命名常量组成的独特类型


编辑我不明白为什么你试图有两个枚举时,性质和定义几乎相同。两者都表示CPUType,并且为所有CPUType指定一个命名列表比以另一种方式处理问题更符合逻辑

不,不能在枚举上实现接口

您可以这样做:

enum CPU
{
    IntelCeleron,
    IntelPentium,
    AmdASeries,
    AmdESeries
}
此方法允许您仅基于此枚举中存在的值选择CPU,也可以使用[System.Flags]

这将允许您像这样组合值

var cpu = CPU.Intel | CPU.Pentium;
var cpu = CPU.Amd | CPU.Pentium;
但它也为不正确的价值观提供了竞争环境

var cpu = CPU.Intel | CPU.Pentium;
var cpu = CPU.Amd | CPU.Pentium;

您不能从接口派生,您可以实现它。您希望如何实际使用SelectedCPUType?这个问题的答案将决定是否有更好的方法来达到你的要求。这很适合,这是一条路要走。
var cpu = CPU.Amd | CPU.Pentium;