3 回答

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

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