C#/MVC 我可以在 foreach 循环中手动附加多个枚举标志吗?

C#/MVC can I manually append multiple Enum Flags in a foreach loop?

我见过使用 HTML 帮助程序等处理 MVC 中的枚举的方法。我采取了一种不同的方法,我将选中框的字符串 [] 传递回控制器。我这样做:

            foreach (string svf in property.SiteVisibilityFlags)
            {                                     
                Enums.SiteVisibilityFlags flagTester;
                if (Enum.TryParse<Enums.SiteVisibilityFlags>(svf, out flagTester))
                {
                    // add to domainProperty
                    domainProperty.SiteVisibilityFlags = flagTester; <--Here is where I mean
                }
            }

现在,我知道通常情况下,使用带有标记的枚举,您会执行以下操作:

     domainProperty.SiteVisibilityFlags = Enums.SiteVisibilityFlags.Corporate | Enums.SiteVisibilityFlags.Properties;

那么,if/how我可以用这种方法完成“|”吗?

您可以使用 [FlagAttribute] 解释的 here。 从那里你可以简单地使用 bit-or (|) operator 如下

domainProperty.SiteVisibilityFlags |= flagTester;

关于属性

也有很好的示例解释 on Whosebug

想通了。任何具有 [Flags] 作为属性的枚举都可以通过汇总所有选中项目的值来解决,如下所示:

// Site Visibility Flags        
            int SiteVisibilityTotalValue = 0;
            foreach (string svf in property.SiteVisibilityFlags)
            {
                Enums.SiteVisibilityFlags flagTester;
                if (Enum.TryParse<Enums.SiteVisibilityFlags>(svf, out flagTester))
                {
                    // sum up values to get total to them convert to enum
                    SiteVisibilityTotalValue += (int)flagTester;
                }
            }
            // convert total to Enum
            domainProperty.SiteVisibilityFlags = (Enums.SiteVisibilityFlags)SiteVisibilityTotalValue;