2013-10-29 10 views
12

Gdy używam następujący kod:Dlaczego pole nie referowanie dozwolone w enum (lub jest to kompilator bug?)

using System; 

namespace Foo { 

    [Flags] 
    public enum Bar : ulong { 
     None   = 0x0000000000000000, 
     A    = 0x8000000000000000, 
     B    = 0x0000000000000001L | A, 
     C    = 0x0000000000000002L | B, 
     D    = 0x0000000000000004L | A, 
     All   = A | B | C | D 
    } 
} 

wywala kompilator mono. Czy jest to spowodowane błędem semantycznym (coś, co nie jest dozwolone w języku), ale nie jest zauważane przez kompilator lub jest to błąd kompilatora?

Wersja: Mono 2.10.8.1

Mam złożył raport o błędzie na Bugzilla (https://bugzilla.xamarin.com/show_bug.cgi?id=15801)

+1

W porządku, co jest nie tak z tym pytaniem? Nie rozumiem, dlaczego jest to odrzucane? Zapewniam MWE ... –

+3

Kompiluje się dobrze w VS2012, więc powiedziałbym, że jest to problem z kompilatorem mono. – MarcinJuraszek

+0

Czy jest skompilowany i czy jest poprawny? – Rob

Odpowiedz

5

Od specyfikacji języka C#, sekcja 14.3:

The associated value of an enum member may not, directly or indirectly, use the value of its own associated enum member. Other than this circularity restriction, enum member initializers may freely refer to other enum member initializers, regardless of their textual position.

więc kod powinien bądź poprawny (jak już sugerowano w komentarzach), a zatem powinien to być błąd kompilatora.

Powiązane problemy