加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 创建一个包含每个成员的集合

发布时间:2020-12-15 09:39:05 所属栏目:大数据 来源:网络整理
导读:有没有办法在编译时(或运行时的常量时间)创建一个包含序数类型T成员的集合,其中包含T的每个命名值? 换句话说,我怎么能补充特定类型的空集? type TEnum = ( eA = 1,eB = 5,eC = 34 ); TSet = set of TEnum;const CSet: TSet = ~[]; // with ~ being my fict
有没有办法在编译时(或运行时的常量时间)创建一个包含序数类型T成员的集合,其中包含T的每个命名值?

换句话说,我怎么能补充特定类型的空集?

type 
  TEnum = 
  ( 
    eA = 1,eB = 5,eC = 34 
  );
  TSet = set of TEnum;

const
  CSet: TSet = ~[]; // with ~ being my fictional set complement operator

然后CSet应该只包含命名值eA,eB和eC.

当然这不是一个实际的问题,我只是好奇

编辑

当使用显式的非连续值声明时,我没有意识到枚举类型的行为.枚举仍包含未命名的成员以填补空白.更新的问题仅适用于指定成员

解决方法

对于没有指定值的枚举,这很容易

type 
  TEnum = 
  ( 
    eA,eB,eC 
  );
  TSet = set of TEnum;

const
  CSet: TSet = [eA..eC];
  CSet: TSet = [low(TEnum)..high(TEnum)];

但是,将您的TEnum定义为

type 
  TEnum = 
  ( 
    eA = 1,eC = 34 
  );

以上将无法按照您的预期运作.在您的情况下,CSet将包含低枚举值和高枚举值之间的所有数值(1到34).

获得您已明确命名的TEnum值的唯一方法是使用CSet:TSet = [eA,eC];

这是按照Simple Types中的说明设计的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读