在 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 中是不是可以将枚举合并为更大的枚举?的主要内容,如果未能解决你的问题,请参考以下文章