RegexOptions.Singleline & RegexOptions.IgnoreCase
è un AND bit per bit, e decide di 0 (cioè RegexOptions.None
).
Il RegexOptions
enum assomiglia a questo:
[Flags]
public enum RegexOptions
{
None = 0,
IgnoreCase = 1,
Multiline = 2,
ExplicitCapture = 4,
Compiled = 8,
Singleline = 16,
IgnorePatternWhitespace = 32,
RightToLeft = 64,
ECMAScript = 256,
CultureInvariant = 512,
}
Così, in binario, abbiamo:
RegexOptions.SingleLine == 10000
RegexOptions.IngoreCase == 00001
Quando si applica un AND bit per bit, otteniamo:
10000
AND 00001
-----
00000
Sostituire con
RegexOptions.Singleline | RegexOptions.IgnoreCase
che dà:
10000
OR 00001
-----
10001
Che ILSpy sarà decompilare in:
Regex regex = new Regex("blah", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Ma io non so che cosa "lavora" in .Net 4.5. Ho appena compilato il tuo codice e ILSpy emette anche:
Regex regex = new Regex("blah", RegexOptions.None);
come previsto.
Non intendi "RegexOptions.SingleLine | RegexOptions.IgnoreCase', cioè un bit _or_ bit al posto di _and_? Presumibilmente le opzioni sono flag (potenze di due) così bit a bit e di due qualsiasi di esse darà zero (che, convertito in un valore enum, è 'None'). – CompuChip
Sì, quello ha fatto il trucco. Grazie. –