delphi - Delphi中的不规则枚举循环

标签 delphi loops enumeration

1)有谁知道是否可以在Delphi(XE)中循环遍历不规则枚举?

循环普通枚举是可以的。来自 Delphi Basics :

var
  suit : (Hearts, Clubs, Diamonds, Spades);
begin
// Loop 3 times
For suit := Hearts to Diamonds do
   ShowMessage('Suit = '+IntToStr(Ord(suit)));
end;

但是,如果“suit”被声明为

var
  suit : (Hearts=1, Clubs, Diamonds=10, Spades);

循环10次。并不奇怪,但我想循环 3。到目前为止,我找到的唯一解决方案是将枚举转换为集合,并使用“for ... in”循环,如 delphi.about.com 上的那样。 .

因此,如果问题 1) 的答案是否定的,那么:
2)Delphi中如何将枚举转换为集合?

我使用它的上下文是编辑框(TEdit)的组件数组,其编号不规则(edit1、edit5、edit7、edit3,...)。虽然可以对所有编辑框重新排序,但它消除了使用枚举作为允许在枚举中间添加编辑框的灵活方式的原因。

最佳答案

我现在手头没有 Delphi 编译器,但我认为 gabr 的方法可以通过这样做得到相当显着的改进

type
  TSuit = (Hearts = 1, Clubs, Diamonds = 10, Spades);

const
  Suits: array[0..3] of TSuit = (Hearts, Clubs, Diamonds, Spades);

谁知道呢,也许它甚至无法编译。

关于delphi - Delphi中的不规则枚举循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132717/

相关文章:

JavaScript 遍历 NodeList

python - 是否有可能在循环中有不稳定的步骤?

php - 使用 PHP while 循环更改表格单元格背景颜色

arrays - 计算数组中不同的元素

Delphi代码生成

delphi - 我可以将动态数组声明为值类型的字典吗?

c++ - MFC 应用程序中 Delphi 7 和 Delphi XE4 之间的 ActiveX 差异

delphi - 当一个类实现了后代接口(interface)时,为什么它不自动算作实现了基接口(interface)?

C# - 从文件夹中播放随机声音文件

c# - 使用枚举更新对象的字符串属性