C# 如何从自定义属性获取枚举成员列表?

C# 如何从自定义属性获取枚举成员列表?,c#,enums,custom-attributes,C#,Enums,Custom Attributes,我有: (1) 枚举类型,如: public enum Types : int { [ParametrizedContentTypeAttribute(typeOf(Type1ParamEnum))] Type1 = 10, [ParametrizedContentTypeAttribute(typeOf(Type2ParamEnum))] Type2 = 20, [ParametrizedContentTypeAttribute(typeOf(Type3ParamEnum))] Type3

我有:

(1) 枚举类型,如:

public enum Types : int
{
[ParametrizedContentTypeAttribute(typeOf(Type1ParamEnum))]
Type1 = 10,

[ParametrizedContentTypeAttribute(typeOf(Type2ParamEnum))]
Type2 = 20,

[ParametrizedContentTypeAttribute(typeOf(Type3ParamEnum))]
Type3 = 30
}
(2) 参数枚举

public enum Type1ParamEnum : int
{
Type1Param1 = 10,
Type1Param2 = 20,
Type1Param3 = 30
}

public enum Type2ParamEnum : int
{
Type2Param1 = 10,
Type2Param2 = 20,
Type2Param3 = 30
}

public enum Type3ParamEnum : int
{
Type3Param1 = 10,
Type3Param2 = 20,
Type3Param3 = 30
}
(3) 自定义属性

[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
    public class ParametrizedContentTypeAttribute : DescriptionAttribute
    {
        public ParametrizedContentTypeAttribute(Type parametersType)
        {
            ParametersType = parametersType;
        }

        public Type ParametersType { get; private set; }
    }

如何从2获取可用枚举成员的列表。如果我从1中知道枚举成员类型的Id

也许它可以通过使用类来伪造,比如在Java中。 名称很糟糕,结果值重叠,因此您必须找出一些方法来正确计算它们,但这应该让您开始:

// Example model
public enum enumBuilding { Hotel, House, Skyscraper };
public enum enumFloor { Basement, GroundFloor, Penthouse };
public enum enumRoom { Entry, Office, Toilet };

public abstract class EnumArray
{
    static protected Building[] buildings;

    static EnumArray()
    {
        buildings = new Building[Enum.GetValues(typeof(enumBuilding)).Length];

        for (int i = 0; i < buildings.Length; i++)
            buildings[i] = new Building(i);
    }

    public static Building Hotel { get { return buildings[0]; } }
    public static Building House { get { return buildings[1]; } }
    public static Building Skyscraper { get { return buildings[2]; } }
}

public class Building
{
    protected Floor[] floors;

    public Building(int start)
    {
        floors = new Floor[Enum.GetValues(typeof(enumFloor)).Length];

        for (int i = 0; i < floors.Length; i++)
            floors[i] = new Floor(start + i * floors.Length);
    }

    public Floor Basement { get { return floors[0]; } }
    public Floor GroundFloor { get { return floors[1]; } }
    public Floor Penthouse { get { return floors[2]; } }
}

public class Floor
{
    protected int[] rooms;

    public Floor(int start)
    {
        rooms = new int[Enum.GetValues(typeof(enumRoom)).Length];

        for (int i = 0; i < rooms.Length; i++)
            rooms[i] = new Room(start + i * rooms.Length);
    }

    public int Entry { get { return rooms[0]; } }
    public int Office { get { return rooms[1]; } }
    public int Toilet { get { return rooms[2]; } }
}

        var index = EnumArray.Hotel.Basement.Office;
//示例模型
公共建筑{酒店、住宅、摩天大楼};
公共楼层{顶层地下室};
公共枚举室{入口、办公室、卫生间};
公共抽象类枚举数组
{
防静电建筑物[]建筑物;
静态枚举数组()
{
建筑物=新建筑物[Enum.GetValues(typeof(enumBuilding)).Length];
对于(int i=0;i
1的id类型(您在这里的意思是什么?)与2有什么关系(猜测您的意思是Type2ParamEnum)?您可以使用“types of 1”获取枚举值,这意味着来自(2)参数的类型枚举值只是值,实际上是整数。您正在尝试定义二维枚举吗?完全正确!比如:有了第一个枚举成员的Id,我可以得到第二个、第三个成员的列表。。。等