在函数中返回枚举类型(不是实例),具体取决于另一个枚举值

时间:2014-11-26 15:14:09

标签: c# enums

我想要一个函数,根据另一个枚举值给我回枚举类型。这是我想要实现的简化和完整的图像示例。这导致"是一种类型但是像变量一样使用"错误。

有没有办法实现这样的功能?

非常感谢!

public class MyClass
{
    public enum MondayActivities { ... }
    public enum TuesdayActivities { ... }

    public Enum PossibleActivitiesByDay(DayEnum day)
    {
        switch (day)
        {
            case DayEnum.Monday:
                return MondayActivities ;
            case DayEnum.Tuesday:
                return TuesdayActivities ;
            ...
        }
    }
}

3 个答案:

答案 0 :(得分:2)

是的,有一种方法可以做到,但是你不会喜欢它,因为你得到的价值会或多或少无用!你不会知道它们是什么。

public enum DayEnum{Monday,Tuesday}
public enum MondayActivities { Washing, Ironing }
public enum TuesdayActivities { Cleaning, Hoovering }

public static Array PossibleActivitiesByDay(DayEnum day)
{
    switch (day)
    {
        case DayEnum.Monday:
            return Enum.GetValues(typeof(MondayActivities)) ;
        case DayEnum.Tuesday:
            return Enum.GetValues(typeof(TuesdayActivities )) ;
    }
    return null;
 }

用法:

foreach(var value in PossibleActivitiesByDay(DayEnum.Monday))
{
    Console.WriteLine(value);
}

实例:http://rextester.com/CTUBYA10553

正如您所看到的那样,它会打印出返回值的名称,但是以编程方式提示您没有类型安全性 - 您不知道它是MondayActivity还是TuesdayActivity

答案 1 :(得分:1)

你的问题已经有了答案。只需返回想要的枚举类型,而不是值或通用枚举。

public Type PossibleActivitiesByDay(DayEnum day)
{
    switch (day)
    {
        case DayEnum.Monday:
            return typeof(MondayActivities) ;
        case DayEnum.Tuesday:
            return typeof(TuesdayActivities) ;
        ...
    }
}

答案 2 :(得分:0)

即使EnumCLR内的类型,它也不支持多态,所以你不能在一些假设的“基础”枚举上抽象它。

我担心的唯一合理的解决方案是在定义的情况下定义返回具体枚举类型的不同函数。