在 Delphi 中是不是可以将枚举合并为更大的枚举?

Posted

技术标签:

【中文标题】在 Delphi 中是不是可以将枚举合并为更大的枚举?【英文标题】:Is it possible in Delphi to union enumerations into a larger enumeration?在 Delphi 中是否可以将枚举合并为更大的枚举? 【发布时间】:2020-04-21 12:09:55 【问题描述】:

Delphi 可以有枚举类型,e.g.:

type
   TDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);   // Enumeration values

是否可以联合枚举类型:

type
   TWeekDay    = (Mon, Tue, Wed, Thu, Fri);
   TWeekendDay = (Sat, Sun);
   TDay        = (TWeekday, TWeekendDay);    //hypothetical syntax

实际上,我需要在不破坏源代码兼容性的情况下将一个大列表分解到它们实际上是不相交的项目中:

type
   TWeekDay =    (Mon, Tue, Wed, Thu, Fri);
   TWeekendDay = (Sat, Sun);
   TDay =        (Mon, Tue, Wed, Thu, Fri, Sat, Sun); //identifier redeclared syntax error

然后改变一些变量:

Day: TWeekday;TDay; Day: TWeekendDay;TDay

在道德上相当于strict typing.????

【问题讨论】:

我能想到的最好的方法是使用枚举子范围。 TDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); TWeekDay = Mon..Fri; TWeekendDay = Sat..Sun; @LURD,好主意。而且很可能是这样做的唯一方法。 @LURD:我考虑过(并且实际上写了评论),但后来意识到它很可能不起作用。大多数星期从星期日开始并以星期六结束,因此该类型应按该顺序运行,这会破坏 TWeekendDay,因为您不能将 Sunday..Saturday 用作子范围。 @KenWhite 本周的开始取决于您来自哪里或世界/国家的哪个部分这需要有意义。据我所知,大多数欧洲国家都将星期一视为一周的第一天 @Ancaron:当然可以。我从来没有说过不会。我指出,由于一周开始和结束的问题,它可能不适用于所有情况。 【参考方案1】:

答案是“否”

但是,如果 subrages 是连续的,您可以使用的解决方法是使用 subranges:

TDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); 

TWeekDay2 = Mon..Fri; 
TWeekday = type TWeekDay2;

TWeekendDay2 = Sat..Sun;
TWeekendDay = type TWeekendDay;

【讨论】:

以上是关于在 Delphi 中是不是可以将枚举合并为更大的枚举?的主要内容,如果未能解决你的问题,请参考以下文章

在线性时间内将小的排序列表合并为更大的排序列表的算法,没有重复项

将 Mat 图像转置为更大的 Mat 图像,Opencv

如何将 RGB 或 HEX 颜色代码分组为更大的颜色组?

将包含 JSON 对象的数据框展开为更大的数据框

如何将多个查找和替换转换为更有效的循环

如何将由小正方形组成的区域划分为更大的矩形?