3 回答

TA貢獻1712條經(jīng)驗 獲得超3個贊
不連續(xù)的枚舉,以及不是從零開始的枚舉,都沒有typeinfo。要實現(xiàn)typeinfo tkEnumeration,由于向后兼容性問題,它的格式必須與現(xiàn)有格式不同。
我考慮過tkDiscontiguousEnumeration為Delphi 2010 實現(xiàn)一個(或可能命名更好的成員),但是考慮到它們的相對稀缺性以及枚舉的困難,收益似乎很小-您如何有效地編碼范圍?有些編碼在某些情況下更好,而在另一些情況下則更糟。

TA貢獻1829條經(jīng)驗 獲得超13個贊
當(dāng)您想將枚舉轉(zhuǎn)換為特定值(并返回)時,我通常使用每個枚舉值所需的值創(chuàng)建一個數(shù)組const:
Const MyEnumValues: array[TMyEnum] of integer = (1,2,5);
這樣,當(dāng)枚舉擴展時,您會得到一個編譯器錯誤,指出您缺少數(shù)組值。
請注意,更改枚舉順序時,必須相應(yīng)更改值。
要獲取枚舉值的“值”,只需編寫:
Value := MyEnumValues[myenum];
為了獲得基于“值”的枚舉值,只需循環(huán)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 關(guān)注
- 699 瀏覽
添加回答
舉報