如何在 C# 中优化枚举赋值
How to optimize enum assignment in C#
我有这个枚举
enum NetopScriptGeneratingCases
{
AddLogMessages,
AddLogErrors,
AddLogJournal,
AllLog = AddLogMessages | AddLogErrors | AddLogJournal,
DoNothing
}
还有 UI 有 3 个复选框,所以根据选中的复选框,我必须生成可能的案例来完成一些工作。
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);
但我不确定这段代码是否正确...还有其他方法吗?
如评论中所述,默认情况下,编译器会为枚举提供一个递增的整数值,这不适合用作位标志。尝试修改您的定义如下:
[Flags]
enum NetopScriptGeneratingCases
{
DoNothing = 0,
AddLogMessages = 1<<0,
AddLogErrors = 1<<1,
AddLogJournal = 1<<2,
AllLog = AddLogMessages | AddLogErrors | AddLogJournal
}
我会采用 并像这样分配你的变量:
NetopScriptGeneratingCases netopScriptGeneratingCases = NetopScriptGeneratingCases.DoNothing;
if (checkBoxAddAuditLog.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogJournal;
}
if (checkBoxAddErrorLog.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogErrors;
}
if (checkBoxAddLogMessages.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogMessages;
}
我有这个枚举
enum NetopScriptGeneratingCases
{
AddLogMessages,
AddLogErrors,
AddLogJournal,
AllLog = AddLogMessages | AddLogErrors | AddLogJournal,
DoNothing
}
还有 UI 有 3 个复选框,所以根据选中的复选框,我必须生成可能的案例来完成一些工作。
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);
但我不确定这段代码是否正确...还有其他方法吗?
如评论中所述,默认情况下,编译器会为枚举提供一个递增的整数值,这不适合用作位标志。尝试修改您的定义如下:
[Flags]
enum NetopScriptGeneratingCases
{
DoNothing = 0,
AddLogMessages = 1<<0,
AddLogErrors = 1<<1,
AddLogJournal = 1<<2,
AllLog = AddLogMessages | AddLogErrors | AddLogJournal
}
我会采用
NetopScriptGeneratingCases netopScriptGeneratingCases = NetopScriptGeneratingCases.DoNothing;
if (checkBoxAddAuditLog.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogJournal;
}
if (checkBoxAddErrorLog.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogErrors;
}
if (checkBoxAddLogMessages.Checked)
{
netopScriptGeneratingCases |= NetopScriptGeneratingCases.AddLogMessages;
}