【问题标题】: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:当然可以。我从来没有说过不会。我指出,由于一周开始和结束的问题,它可能不适用于所有情况。

标签: delphi enums delphi-xe6


【解决方案1】:

答案是“否”

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多