C# 进行枚举比较的公认方法
我相信这可能是问过的,但我似乎找不到正确的答案…可能只是使用了错误的搜索词。无论如何,我有以下代码C# 进行枚举比较的公认方法,c#,enums,C#,Enums,我相信这可能是问过的,但我似乎找不到正确的答案…可能只是使用了错误的搜索词。无论如何,我有以下代码 if (e.Menu.Id.Equals(SchedulerMenuItemId.AppointmentMenu) || e.Menu.Id.Equals(SchedulerMenuItemId.AppointmentDependencyMenu)) { ... } 我觉得这有点多余/重复。我不能使用按位或,因为枚举没有标记为标志。我猜这是因为定义了71个枚举值,这有点超出了标志选项 我
if (e.Menu.Id.Equals(SchedulerMenuItemId.AppointmentMenu) ||
e.Menu.Id.Equals(SchedulerMenuItemId.AppointmentDependencyMenu))
{ ... }
我觉得这有点多余/重复。我不能使用按位或,因为枚举没有标记为标志
。我猜这是因为定义了71个枚举值,这有点超出了标志选项
我可能会做一个转换,让箱子“掉下来”,这可能会更干净一些
是否有其他方法进行上述比较(考虑到可扩展性和可读性),可能不止2次比较。您可以始终使用LINQ
var enums = new[]
{
SchedulerMenuItemId.AppointmentMenu
SchedulerMenuItemId.AppointmentDependencyMenu
};
if(enums.Any(x => (int)x == e.Menu.Id)) { }
您始终可以使用LINQ
var enums = new[]
{
SchedulerMenuItemId.AppointmentMenu
SchedulerMenuItemId.AppointmentDependencyMenu
};
if(enums.Any(x => (int)x == e.Menu.Id)) { }
这个问题可能值得一提,我不确定这里是否偏离主题,但那里肯定是主题。可能根本的问题是为什么有一个带有71个单独选项的标志枚举?“我想这是因为定义了71个枚举值,这有点超出了标志选项…”这与容量无关。按位OR用于枚举值不互斥的情况。71枚举?这是一个不使用枚举的危险信号。可能有一个XML文件作为配置文件,包含所有菜单选项,您可以使用LINQ to XML解析XML。@pushpraj注意到。如果这里没有成功,我将删除并转到代码审阅。这个问题可能值得一提,我不确定它是否脱离主题,但它肯定在主题上。可能根本的问题是为什么您有一个带有71个单独选项的标志枚举?“我想这是因为定义了71个枚举值,这有点超出了标志选项。。。“这与容量无关。按位OR用于枚举值不互斥的情况。71枚举?这是一个不使用枚举的危险信号。可能有一个XML文件作为配置文件,包含所有菜单选项,您可以使用LINQ to XML解析XML。@pushpraj注意到。如果这里没有成功,我将删除并转到代码审阅。+1。请注意,
newhashset{Value1,Value2,…}
在几乎所有情况下都会更快。很好!这是一个比我现在的方法好得多的方法。请注意,newhashset{Value1,Value2,…}
在几乎所有情况下都会更快。很好!这是一个比我现在的方法好得多的方法。