我可以将类的实例保留在枚举中吗?

时间:2018-09-04 20:11:40

标签: c#

在任何地方我遇到的枚举都将string作为值,将int作为索引,但是如果我想将实例保留在枚举中,该怎么办?

public enum TestEnum
{
   new Person("John"),
   new Person("Jack")
}

有可能吗? 只是问

// Edit 2019:那时候我太愚蠢了,应该当成数组来使用

1 个答案:

答案 0 :(得分:1)

这无法完成。

  

枚举类型是一种独特的值类型(第4.1节),它声明一组命名常量。

     

枚举类型声明的主体定义了零个或多个枚举成员,它们是枚举类型的命名常量。没有两个枚举成员可以使用相同的名称。

     

每个枚举成员都有一个关联的常数值。此值的类型是包含的枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围内。

枚举具有名为常量和关联常量值的成员。每个Enum都有一个基础类型,默认为int。常量值可以显式给出,也可以隐式给出。

enum Color 
{
    Red,
    Blue,
    Green
}

等同于

enum Color : int 
{
    Red = 0,
    Blue = 1,
    Green = 2
}

一个类实例,例如new Person("Jack");不是常量,并且不能作为枚举成员或值有效。

除了尝试执行此操作的有效性之外,我不确定您将如何使用它。您是否希望能够访问TestEnum.Jack并检索您的Person("Jack")实例?如果是这样,您可以使用具有静态只读属性并提供正确默认值的类来完成与此类似的操作。

public static class People {
    public static Person Jack {get;} = new Person("Jack");
    public static Person John {get;} = new Person("John");
}

您现在可以使用People.JohnPeople.Jack获取人员实例。 如果Person类是可变的,尽管这些属性是只读的,这可能会导致问题。