繁体   English   中英

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

[英]Return enum type (not instance) in a function, depending on another enum value

我希望有一个函数可以根据另一个枚举的值返回枚举类型。 这是我要达到的目标的简化且充满图像的示例。 这会导致“是一种类型,但像变量一样使用”错误。

有没有办法实现这种功能?

非常感谢 !

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM