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中的说明设计的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |