2012-09-27 12 views
8

Il seguente codice viene compilato in C#:Perché F # non consente più attributi in cui C# fa?

[ContentType("text")] 
[ContentType("projection")] 
public class Class1 
{ 
} 

Il seguente codice in F # non compila:

[<ContentType("text")>] 
[<ContentType("projection")>] 
type Class1() = class end 

L'errore di compilazione in F # è: "Il tipo di attributo 'ContentTypeAttribute' ha 'AllowMultiple = false'. più istanze di questo attributo non possono essere collegati a un singolo elemento del linguaggio ".

da decompilazione ContentType, posso vedere che ContentType eredita da MultipleBaseMetadataAttribute che ha 'AllowMultiple = true' nel AttributeUsage.

In realtà, sembra che F # non eredita l'AttributeUsage dalla classe genitore.

[<AttributeUsage(AttributeTargets.Class, AllowMultiple = true)>] 
type FooAttribute() = 
    inherit Attribute() 

type BarAttribute() = 
    inherit FooAttribute() 

[<Foo>] 
[<Foo>] 
type MyClassCompiles() = class end 

dove

[<Bar>] 
[<Bar>] 
type MyClassDoesNotCompile() = class end 
+0

Per inciso, questo suona come un duplicato esatto alla seguente domanda, ma in realtà non è. Si tratta di F # onorare l'impostazione AllowMultiple su un attributo, e l'altra domanda è sulla sintassi per combinare più attributi in una singola istruzione. http://stackoverflow.com/questions/9620712/is-it-possible-to-combine-multiple-attributes-in-f –

risposta

8

Sembra come un insetto. Invia email a fsbugs [at] microsoft.com. Ecco un altro evidente errore: non sembra onorare AttributeTargets:

[<AttributeUsage(AttributeTargets.Enum)>] 
type FooAttribute() = 
    inherit Attribute() 

[<Foo>] 
type T = struct end //happily compiles 
+0

Grazie, mi sono collegato il bug con la squadra FSharp. – Johan

Problemi correlati