在Delphi的枚举中迭代项目

我想迭代枚举中的项目.

我想说可以这样说:

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;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...