rho*_*ody 4 delphi types enumeration
给定Delphi中的枚举类型声明,例如:
TMyType = (Item1, Item2, Item3);
Run Code Online (Sandbox Code Playgroud)
有没有办法在运行时将第四项(比如Item4)添加到枚举类型中,以便在应用程序执行期间的某个时刻我有:
TMyType = (Item1, Item2, Item3, Item4);
Run Code Online (Sandbox Code Playgroud)
或者是在Delphi中修复的类型?
你可以创建一个set.
以下示例使用items item1和初始化集合item4.之后item5添加.它显示item5是否在添加之前和之后的集合中,因此您将获得此输出:
FALSE
TRUE
Run Code Online (Sandbox Code Playgroud)
例:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TMyType = (Item1, Item2, Item3, Item4, Item5,Item6);
const
cItems1And4 : set of TMyType = [Item1,Item4];
var
MyItems:set of TMyType;
begin
MyItems := cItems1And4;
WriteLn(Item5 in MyItems);
Include(MyItems,Item5);
WriteLn(Item5 in MyItems);
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)
...
我想输入以下内容作为对Andreases回复的评论,但评论系统不允许我正确格式化东西..
如果你没有坚持使用古老的Delphi,这可能是一个更好的主意:
TComputerType = record
const
Desktop = 0;
Server = 1;
Netbook = 2;
Tabled = 3;
end;
Run Code Online (Sandbox Code Playgroud)
这确保您不会污染您的命名空间,并且您将使用它,就好像它是一个范围内的枚举:
TComputerType.Netbook
Run Code Online (Sandbox Code Playgroud)
我现在通常这样做..你甚至可以在那里创建一些方便的辅助函数或属性,例如转换为字符串和转换为字符串.
不,你'不能'做到这一点.这违反了Delphi的工作方式.(回想一下Delphi在编译时已经检查过你的类型.)
如果我是你,我不会这样做
TComputerType = (ctDesktop, ctServer, ctLaptop, ctNetbook, ctTablet)
Run Code Online (Sandbox Code Playgroud)
相反,我会这样做
TComputerType = integer;
const
COMPUTER_TYPE_DESKTOP = 0;
COMPUTER_TYPE_SERVER = 1;
COMPUTER_TYPE_LAPTOP = 2;
COMPUTER_TYPE_NETBOOK = 3;
COMPUTER_TYPE_TABLET = 4;
Run Code Online (Sandbox Code Playgroud)
我相信你明白了.