返回函数中的枚举类型(不是实例),具体取决于另一个枚举值
本文关键字:枚举 实例 另一个 取决于 函数 类型 返回 | 更新日期: 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
内部的一个类型,它也不支持多态性,所以你不能把它抽象在一些假设的"基"枚举上。
恐怕在所呈现的情况下,唯一合理的解决方案是定义返回具体枚举类型的不同函数。