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);
如预期.
总结以上是内存溢出为你收集整理的c# – 为什么在MSIL中将RegexOptions编译为RegexOptions.None?全部内容,希望文章能够帮你解决c# – 为什么在MSIL中将RegexOptions编译为RegexOptions.None?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)