C#/ MVC我可以手动在foreach循环中附加多个Enum Flags吗?

时间:2015-05-04 19:19:11

标签: model-view-controller enums flags

我已经看过使用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;

那么,如果/如何在这种方法中完成&#39; |&#39; ...

2 个答案:

答案 0 :(得分:1)

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

domainProperty.SiteVisibilityFlags |= flagTester;

关于属性

的示例on stackoverflow也有一个非常好的解释

答案 1 :(得分:1)

想通了。任何以[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;