![](/img/trans.png)
[英]How can I make a method that takes more than one Enum type instead of me having to Cast all the time
[英]How can I pass more than one enum to a method that receives only one?
我想知道以下是否可行:
Regex.Match
方法可以接收枚举,所以我可以指定:
RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline
如果我需要指定的不仅仅是一个,该怎么办? (例如,我希望我的正则表达式是Multiline
,我希望它忽略模式空格)。
我能用|
像C / C ++中的运算符?
您需要使用[Flags]
属性对其进行注释并使用|
运营商将它们结合起来
在你提到的情况下,你可以这样做,因为RegexOptions
枚举用它注释。
定义:
[FlagsAttribute]
public enum NewsCategory : int
{
TopHeadlines =1,
Sports=2,
Business=4,
Financial=8,
World=16,
Entertainment=32,
Technical=64,
Politics=128,
Health=256,
National=512
}
使用:
mon.ContentCategories = NewsCategory.Business |
NewsCategory.Entertainment |
NewsCategory.Politics;
由于它是带有Flags属性的Enum,您可以使用:
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline
如果它是Flags
枚举,你需要按位OR
:
var combine = RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline;
myFunction(combine);
如果这不是这样的枚举,那你就不走运了。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx 。
不要使用&
,请使用|
(你想做一个按位布尔OR)。
只是为了增强答案,Flags属性不是必需的。 每个枚举值都可以与按位组合 运营商。 Flags属性仅在转换为字符串时使枚举更具可读性(例如,不是看到带有按位结果的数字作为数字,您会看到所选的标志组合在一起)。
要测试是否设置了条件,通常会使用按位&。 这也可以在没有Flags属性的情况下工作。
在此属性的MSDN文档中,有两个枚举的示例,一个用于,另一个没有它: FlaggsAttribute 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.