Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进行枚举比较的公认方法_C#_Enums - Fatal编程技术网

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,…}
在几乎所有情况下都会更快。很好!这是一个比我现在的方法好得多的方法。