[英]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) ;
...
}
}
即使Enum是CLR
内的一种类型,它也不支持多态,所以您不能在某些假设的“基本”枚举上抽象它。
恐怕在当前情况下,唯一合理的解决方案是定义返回具体枚举类型的不同函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.