【发布时间】:2016-03-09 12:24:13
【问题描述】:
我有这个枚举
enum NetopScriptGeneratingCases
{
AddLogMessages,
AddLogErrors,
AddLogJournal,
AllLog = AddLogMessages | AddLogErrors | AddLogJournal,
DoNothing
}
还有带有 3 个复选框的 UI,所以根据选中的复选框,我必须生成可能的案例来完成某些工作。
NetopScriptGeneratingCases netopScriptGeneratingCases = NetopScriptGeneratingCases.DoNothing;
if (checkBoxAddAuditLog.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogJournal;
}
else if (checkBoxAddErrorLog.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogErrors;
}
else if (checkBoxAddLogMessages.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogMessages;
}
else if (checkBoxAddAuditLog.Checked || checkBoxAddErrorLog.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogJournal | NetopScriptGeneratingCases.AddLogErrors;
}
else if (checkBoxAddAuditLog.Checked || checkBoxAddLogMessages.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogJournal | NetopScriptGeneratingCases.AddLogMessages;
}
else if (checkBoxAddErrorLog.Checked || checkBoxAddLogMessages.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogErrors | NetopScriptGeneratingCases.AddLogMessages;
}
else if (checkBoxAddErrorLog.Checked || checkBoxAddLogMessages.Checked || checkBoxAddAuditLog.Checked)
{
netopScriptGeneratingCases = NetopScriptGeneratingCases.AddLogErrors | NetopScriptGeneratingCases.AddLogMessages | NetopScriptGeneratingCases.AddLogJournal;
}
var modifiedFiles = NetopScriptGenerator.GenerateNetopScript(netopScriptGeneratingCases, netopFiles);
但我不确定这段代码是否正确......还有其他方法吗?
【问题讨论】:
-
如果您要使用
enum作为一组标志,就像通过将它们组合在一起创建AllLog一样,那么您需要为它们提供 2 的幂的值.就是你应该把第一个设置为1,然后是2,然后是4,DoNothing应该设置为0。 -
我认为代码的编写方式是有缺陷的,因为第一次检查会吞噬很多其他检查;您应该尝试最具体的情况,并让更一般的情况结束。