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 關注
- 691 瀏覽
添加回答
舉報