亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我得到一個“枚舉類型”的“類型沒有類型信息”錯誤

為什么我得到一個“枚舉類型”的“類型沒有類型信息”錯誤

繁星淼淼 2019-11-20 09:42:25
我聲明了以下枚舉類型,我希望第一個成員的序數值為1(一個),而不是通常的0(零):  type    TMyEnum = (               meFirstValue = 1,               meSecondValue,               meThirdValue              );如果我調用TypeInfo(),例如,作為對GetEnumName()的調用的一部分,則會出現編譯器錯誤:  GetEnumName(TypeInfo(TMyEnum), Ord(aValue));錯誤:“ E2134:類型'TMyEnum'沒有typeinfo”為什么是這樣?我知道,只有在啟用$ M編譯器選項或(從某些類(例如TPersistent)派生)進行編譯的情況下,類才具有typeinfo ,但我認為為枚舉類型使用typeinfo并不存在任何特殊條件。
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

不連續的枚舉,以及不是從零開始的枚舉,都沒有typeinfo。要實現typeinfo tkEnumeration,由于向后兼容性問題,它的格式必須與現有格式不同。


我考慮過tkDiscontiguousEnumeration為Delphi 2010 實現一個(或可能命名更好的成員),但是考慮到它們的相對稀缺性以及枚舉的困難,收益似乎很小-您如何有效地編碼范圍?有些編碼在某些情況下更好,而在另一些情況下則更糟。


查看完整回答
反對 回復 2019-11-20
?
烙印99

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;


查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關注
  • 691 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號