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;
我见过使用 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;