如何在TStringList对象中存储一个集合?

sma*_*ins 3 delphi

我正在尝试将一个集合存储在TStringList的对象属性(并读取它)中(我也将使用它来存储与该集合相关联的文本),但是我得到了一个无效的集合类型.

在StringList对象中存储集合的最佳方法是什么?此外,在销毁StringList时是否需要释放此对象?

这是一些示例代码:

type
 TDummy = (dOne, dTwo, dThree);
 TDummySet = set of TDummy;


var
  DummySet: TDummySet;
  SL: TStringList;
begin
  SL := TStringList.Create;
  Try
    DummySet := [dOne, dThree];
    SL.AddObject('some string', TObject(DummySet)); // Doesn't work. Invalid typecast
  Finally
    SL.Free;
  End;
end;
Run Code Online (Sandbox Code Playgroud)

Uli*_*rdt 5

首先阅读其他答案 - 可能你会找到一个不太讨厌的解决方案.

但是FTR:你可以写

SL.AddObject('some string', TObject(Byte(DummySet)));
Run Code Online (Sandbox Code Playgroud)

DummySet := TDummySet(Byte(SL.Objects[0]));
Run Code Online (Sandbox Code Playgroud)

如果你真的想要

注意:Byte如果向TDummySet类型添加足够的元素,则必须更改关键字.例如,如果你再添加六个元素(这样总共有九个)你需要转换为Word.

  • 不,使用`as`**来投射字节**是无稽之谈.但演员本身有时会占有一席之地.这可能是一个:无论是直接使用TStringList还是编写后代,都需要一些强制转换. (2认同)