2015-10-30 16 views
6

ILSpy böyle derleme sonraNeden RegexOptions RegexOptions.None MSIL içinde değil derlenmiş?

Regex regex = new Regex("blah", RegexOptions.Singleline & RegexOptions.IgnoreCase); 

görünüyor Bu kod:

Regex regex = new Regex("blah", RegexOptions.None); 

Neden olur ve .NET 3.5 eşleşen değil regex nedeni olabilir? 4.5 üzerinde çalışır.

+7

Bunu mu demek istediniz: RegexOptions.SingleLine | RegexOptions.IgnoreCase', yani _and_ yerine bitwise _or_? Muhtemelen seçenekler bayraklar (iki iktidar), yani bitsel ve herhangi birinin ikisi sıfır verecektir (bu, bir enum değerine geri dönüştürülür, 'Yok'tur). – CompuChip

+0

Evet, bu hile yaptı. Teşekkür ederim. –

cevap

14
RegexOptions.Singleline & RegexOptions.IgnoreCase 

bir bit-bazında olan ve ve 0 (yani RegexOptions.None) dönüşür.

RegexOptions enum şuna benzer: alırsak alalım,

RegexOptions.SingleLine == 10000 
RegexOptions.IngoreCase == 00001 

bit tabanlı uygularken VE:

10000 
AND 00001 
    ----- 
    00000 

değiştirin

[Flags] 
public enum RegexOptions 
{ 
    None = 0, 
    IgnoreCase = 1, 
    Multiline = 2, 
    ExplicitCapture = 4, 
    Compiled = 8, 
    Singleline = 16, 
    IgnorePatternWhitespace = 32, 
    RightToLeft = 64, 
    ECMAScript = 256, 
    CultureInvariant = 512, 
} 

Yani, ikilik sistemde, elimizdeki

ile birlikte

10000 
OR 00001 
    ----- 
    10001 

ILSpy içinde koda olacak Yani:

Regex regex = new Regex("blah", RegexOptions.Singleline | RegexOptions.IgnoreCase); 

Ama .Net 4.5 ne "eserlerini" bilmiyorum verir

. Sadece kodunuzu derledim ve ILSpy de belirtildiği gibi:

.

+0

Birgün Bayrakları doğru şekilde birleştirmeyi öğreneceğim. Teşekkür ederim. . Net 4.5 ile ilgili olarak, aynı metin üzerinde aynı regex öğesinin doğru seçeneği belirtildiği gibi dev makinemde eşleştiğini, ancak XP'de eşleşmeyeceğini (aynı derleme, hata ayıklayıcısız, derleme sürümü) doğruladığımı doğrularım. Temel olarak, bu beni ilk sırada karıştırdı. –

+0

Muhtemelen, temiz projede sorunu yeniden oluşturamadığım için hatalı bir test oldu. –

İlgili konular