【发布时间】:2019-12-12 11:02:46
【问题描述】:
我经常需要给一些第三方枚举类型加上一个“默认值”,例如:
TThirdPartyEnum = (
eA,
eB,
eC
);
我想定义一个这样的枚举类型:
TMyEnum = (
eA,
eB,
eC,
eDefault
);
我想参考TThirdPartyEnum 值以避免维护TMyEnum(应在每次TThirdPartyEnum 值更改时更新)。
我尝试如下失败:
TMyEnum = Low(TThirdPartyEnum)..High(TThirdPartyEnum) + eDefault;
TMyEnum = (
Low(TThirdPartyEnum)..High(TThirdPartyEnum),
eDefault
);
有没有编译器可以理解的语法?
【问题讨论】:
-
AFAIK,枚举不可继承(不完全是,你正在尝试,但值得一提)
-
只是好奇为什么不用
Low(TThirdPartyEnum)..High(TThirdPartyEnum),而不是eA..High(TThirdPartyEnum),。如果eA从第三方枚举中删除会怎样。 -
还是搬到了更高的地方?喜欢
(e0, e1, eA, eB, eC) -
@NasreddineGalfout:你说得对,我已经更新了问题
-
将默认值作为枚举的最后一个成员似乎不是最好的主意,原因有很多。其中之一是
Default(TMyEnum)返回等于零的成员,可能是枚举的第一个成员,而不是eDefault。也许你可以用泛型解决你的问题 - Nullable<T>。另请参阅this C# question 和 Eric Lippert 关于默认枚举值的精彩回答。
标签: delphi enums delphi-xe7