2013-10-29 3 views
12

Wenn ich den folgenden Code:Warum Feld verweist nicht in einer Enum erlaubt (oder ist dies ein Compiler 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 
    } 
} 

Die Mono-Compiler stürzt ab. Liegt das an einem semantischen Fehler (was in der Sprache nicht erlaubt ist), wird aber vom Compiler nicht bemerkt oder ist das ein Compiler-Bug?

Version: Mono 2.10.8.1

ich einen Fehlerbericht an Bugzilla eingereicht haben (https://bugzilla.xamarin.com/show_bug.cgi?id=15801)

+1

Alles klar, was ist los mit dieser Frage? Ich verstehe nicht, warum das abgelehnt wird? Ich biete eine MWE ... –

+3

Es kompiliert in VS2012 gut, also würde ich sagen, es ist ein Mono-Compiler-Problem. – MarcinJuraszek

+0

Kompiliert und ist korrekt? – Rob

Antwort

5

Aus der Sprache C# spec, Abschnitt 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.

So Ihr Code sollte korrekt sein (wie es bereits in den Kommentaren vorgeschlagen wurde), und daher sollte es ein Compiler Bug sein.

Verwandte Themen