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

在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;

(编辑:李大同)

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

    推荐文章
      热点阅读