c# – 为什么在MSIL中将RegexOptions编译为RegexOptions.None?
发布时间:2020-12-15 17:40:49 所属栏目:百科 来源:网络整理
导读:这段代码 Regex regex = new Regex("blah",RegexOptions.Singleline RegexOptions.IgnoreCase); 编译后在ILSpy中看起来像这样: Regex regex = new Regex("blah",RegexOptions.None); 为什么会发生这种情况,并且它是正则表达式在.Net 3.5中不匹配的原因吗?
这段代码
Regex regex = new Regex("blah",RegexOptions.Singleline & RegexOptions.IgnoreCase); 编译后在ILSpy中看起来像这样: Regex regex = new Regex("blah",RegexOptions.None); 为什么会发生这种情况,并且它是正则表达式在.Net 3.5中不匹配的原因吗?在4.5它工作. 解决方法RegexOptions.Singleline & RegexOptions.IgnoreCase 是按位AND,并解析为0(即RegexOptions.None). RegexOptions枚举如下所示: [Flags] public enum RegexOptions { None = 0,IgnoreCase = 1,Multiline = 2,ExplicitCapture = 4,Compiled = 8,Singleline = 16,IgnorePatternWhitespace = 32,RightToLeft = 64,ECMAScript = 256,CultureInvariant = 512,} 所以,在二进制中,我们有: RegexOptions.SingleLine == 10000 RegexOptions.IngoreCase == 00001 当应用按位AND时,我们得到: 10000 AND 00001 ----- 00000 用…来代替 RegexOptions.Singleline | RegexOptions.IgnoreCase 这使: 10000 OR 00001 ----- 10001 ILSpy将反编译: Regex regex = new Regex("blah",RegexOptions.Singleline | RegexOptions.IgnoreCase); 但我不知道.Net 4.5中的“有效”.我刚编译了你的代码,ILSpy也输出: Regex regex = new Regex("blah",RegexOptions.None); 如预期. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |