微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐