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

本文关键字:枚举 实例 另一个 取决于 函数 类型 返回 | 更新日期: 2023-09-27 18:32:10

我想要一个函数根据另一个枚举的值给我返回枚举类型。这是一个简化且充满图像的示例,说明了我想要实现的目标。这会导致"是一种类型,但像变量一样使用"错误。

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

多谢!

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 ;
            ...
        }
    }
}

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

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

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

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

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

即使 Enum 是 CLR 内部的一个类型,它也不支持多态性,所以你不能把它抽象在一些假设的"基"枚举上。

恐怕在所呈现的情况下,唯一合理的解决方案是定义返回具体枚举类型的不同函数。