添加第九个枚举时无效的类型转换

Met*_*sel 0 delphi ordinal

我继承了一些我需要修改的代码.原文基本上就是下面的内容.我需要在枚举列表中添加第九项,但是当我这样做时,我在"ord(byte(ts))"处得到了无效的类型转换.

program OrdTest;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

type
  TFlag = (tsOne, tsTwo, tsThree, tsFour, tsFive, tsSix, tsSeven, tsEight); // , tsNine
  TStatus = set of TFlag;

function GetStatus(i: integer): TStatus;
var
  ts: TStatus;
  j: smallint;
begin
  try
    ts := GetStatus(4);  // returned from a table

    j := ord(byte(ts)); // Invalid typecast
  except
    on E: Exception do
      Writeln(E.Message)
  end;

end;

end.
Run Code Online (Sandbox Code Playgroud)

因为一个字节可以是任何有效的255,我不明白这个例外.

我能做些什么才能添加第九个枚举并仍具有代码功能?

Uli*_*rdt 7

在你添加之前你tsNine有8个枚举值,所以它们中的一组取8位并装入一个Byte.现在你有9位,需要一个Word适合的设置.所以你必须投入到Word现在.您可以SizeOf(ts)自己查看.