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
ビット単位を適用すると、我々が得る:
10000
AND 00001
-----
00000
は交換してください
RegexOptions.Singleline | RegexOptions.IgnoreCase
与える:
ILSpyがでコンパイルされます
10000
OR 00001
-----
10001
:
Regex regex = new Regex("blah", RegexOptions.Singleline | RegexOptions.IgnoreCase);
しかし、私は純4.5でどのような "作品" 知りませんが。私はちょうどあなたのコードをコンパイルしました。また、ILSpyも出力します:
Regex regex = new Regex("blah", RegexOptions.None);
あなたは 'RegexOptions.SingleLine | RegexOptions.IgnoreCase'、つまり_and_ではなくビット単位の_or_ですか?おそらく、オプションはフラグ(2の累乗)であり、そのビットの任意の2つは0になります(これは列挙型の値に変換され、 'None'です)。 – CompuChip
はい、そのトリックを行った。ありがとうございました。 –