【发布时间】:2014-07-05 09:37:59
【问题描述】:
概述
不完全确定这个问题的措辞是否恰当,但我之前问过这个与这个问题相关的问题:How do I correctly implement a Set in a class as a property?
我喜欢让代码尽可能简短、简洁和易读,这就是我认为有些代码可以写得更好但我遇到了问题的地方。
读取 Set 中值的两种方法中的第一个示例:
漫长的路:
if (Delphi1 in IDECompatibility) then
CheckListBox1.Checked[0] := True;
if (Delphi2 in IDECompatibility) then
CheckListBox1.Checked[1] := True;
if (Delphi3 in IDECompatibility) then
CheckListBox1.Checked[2] := True;
更简洁、更简洁、更好的方法:
CheckListBox1.Checked[0] := (Delphi1 in IDECompatibility);
CheckListBox1.Checked[1] := (Delphi2 in IDECompatibility);
CheckListBox1.Checked[2] := (Delphi3 in IDECompatibility);
现在我想换一种方式,设置值。
目前我知道的唯一方法是漫漫长路:
if CheckListBox1.Checked[0] then
IDECompatibility := IDECompatibility + [Delphi1]
else
IDECompatibility := IDECompatibility - [Delphi1];
if CheckListBox1.Checked[1] then
IDECompatibility := IDECompatibility + [Delphi2]
else
IDECompatibility := IDECompatibility - [Delphi2];
if CheckListBox1.Checked[2] then
IDECompatibility := IDECompatibility + [Delphi3]
else
IDECompatibility := IDECompatibility - [Delphi3];
如果可能的话,我想做这样的事情:
IDECompatibility[Delphi1] := CheckListBox1.Checked[0]; // Array type required
IDECompatibility[Delphi2] := CheckListBox1.Checked[1]; // Array type required
IDECompatibility[Delphi3] := CheckListBox1.Checked[2]; // Array type required
有 Exclude 和 Include 成员,但我不确定这里是否需要这些。
那么,如上所述 - 有没有更简单的方法来定义基于布尔值的 Enum 类型?
谢谢。
【问题讨论】:
-
你确定枚举是正确的选择吗?今天,您现在知道将来会有更多您今天无法命名的枚举值(XE7 或 XTE ...)。对我来说,我会使用一个集合
-
Delphi1、Delphi2和Delphi3分别代表什么?您是否尝试根据他们正在运行的 Delphi 版本向最终用户提供兼容性定制?如果是的话,这听起来像是条件编译的情况…… -
不管他的用例如何,如果一个枚举集语法可以像一个遍历枚举的布尔数组一样使用会很好。
-
忽略
Delphi1,Delphi2Delphi3所显示的内容,这仅用于示例目的。 -
你能用一个通用列表来做这个吗?
TList<TSomeEnum>- 或者更好的自定义TList<T>;可以防止重复等的东西。