在Delphi的枚举中迭代项目
发布时间:2020-12-15 10:09:14 所属栏目:大数据 来源:网络整理
导读:我想迭代枚举中的项目. 我想说可以这样说: type TWeekdays = (wdMonday,wdTuesday,wdWednesday,wdThursday,wdFriday);...elementCount := GetElementCount(TypeInfo(TWeekDays));for i := 0 to elementCount - 1 do begin ShowMessage(GetEnumName(TypeInfo
我想迭代枚举中的项目.
我想说可以这样说: type TWeekdays = (wdMonday,wdTuesday,wdWednesday,wdThursday,wdFriday); ... elementCount := GetElementCount(TypeInfo(TWeekDays)); for i := 0 to elementCount - 1 do begin ShowMessage(GetEnumName(TypeInfo(TWeekdays),i)); end; 最近我能够来的是这样的: function MaxEnum(EnumInfo: PTypeInfo): integer; const c_MaxInt = 9999999; var i: integer; s: string; begin //get # of enum elements by looping thru the names //until we get to the end. for i := 0 to c_MaxInt do begin s := Trim(GetEnumName(EnumInfo,i)); if 0 = Length(s) then begin Result := i-1; Break; end; end; end; 我用这样的方式: procedure TForm1.BitBtn1Click(Sender: TObject); var i,nMax: integer; begin ListBox1.Clear; nMax := MaxEnum(TypeInfo(TWeekdays)); for i := 0 to nMax do begin ListBox1.Items.Add(GetEnumName(TypeInfo(TWeekdays),i)); end; end; 这很好,除了我看到的列表(注意最后两个项目): wdMonday wdTuesday wdWednesday wdThursday wdFriday Unit1 '@'#0'??E'#0#0#0#0#0#0#0#0#0#0#0#0#0 <more garbage characters> 这两件事显然不是我想要的. 有没有更好的方法来迭代枚举类型的元素? 如果没有,那么可以安全地假设使用我当前的方法总是会有两个额外的项目?显然,一个是单位名称,但是“@”符号在做什么呢?它真的是垃圾,还是更多的类型信息? 我使用的是Delphi 2007. 解决方法
简单:
type TWeekdays = (wdMonday,wdFriday); procedure Test; var el: TWeekdays; begin for el := Low(TWeekdays) to High(TWeekdays) do ; // end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |