3 回答
TA贡献1712条经验 获得超3个赞
不连续的枚举,以及不是从零开始的枚举,都没有typeinfo。要实现typeinfo tkEnumeration,由于向后兼容性问题,它的格式必须与现有格式不同。
我考虑过tkDiscontiguousEnumeration为Delphi 2010 实现一个(或可能命名更好的成员),但是考虑到它们的相对稀缺性以及枚举的困难,收益似乎很小-您如何有效地编码范围?有些编码在某些情况下更好,而在另一些情况下则更糟。
TA贡献1829条经验 获得超13个赞
当您想将枚举转换为特定值(并返回)时,我通常使用每个枚举值所需的值创建一个数组const:
Const MyEnumValues: array[TMyEnum] of integer = (1,2,5);
这样,当枚举扩展时,您会得到一个编译器错误,指出您缺少数组值。
请注意,更改枚举顺序时,必须相应更改值。
要获取枚举值的“值”,只需编写:
Value := MyEnumValues[myenum];
为了获得基于“值”的枚举值,只需循环MyEnumValues的值即可:
Function GetEnumByValue(value:integer): TMyEnum;
Var
myenum: TMyEnum;
Begin
For myenum = low(TMyEnum) to high(TMyEnum) do
If MyEnumValues[myenum] = value then
exit(myenum);
Raise exception.create(‘invalid value for tmyenum’);
End;
- 3 回答
- 0 关注
- 656 浏览
添加回答
举报