2012-09-27 47 views
8

El siguiente código compila en C#:¿Por qué F # no permite atributos múltiples donde C# lo hace?

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

el código siguiente en F # no se compila:

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

El error de compilación en F # es: "El tipo de atributo 'ContentTypeAttribute' tiene 'allowMultiple = false '. No se pueden asociar varias instancias de este atributo a un solo elemento de idioma. "

Por ContentType descompilación, puedo ver que ContentType hereda de MultipleBaseMetadataAttribute que tiene 'allowMultiple = true' en el AttributeUsage.

De hecho, parece que F # no hereda el AttributeUsage de la clase principal.

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

type BarAttribute() = 
    inherit FooAttribute() 

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

donde

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

Por cierto, esto suena como un duplicado exacto de la siguiente pregunta, pero no lo es en realidad. Esto se trata de F # que honra la configuración de AllowMultiple en un atributo, y la otra pregunta es sobre la sintaxis para combinar múltiples atributos en una sola declaración. http://stackoverflow.com/questions/9620712/is-it-possible-to-combine-multiple-attributes-in-f –

Respuesta

8

Parece un error. Correo electrónico fsbugs [at] microsoft.com. Aquí hay otro error evidente: no aparece en honor AttributeTargets:

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

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

Gracias, registré el error con el equipo de FSharp. – Johan

Cuestiones relacionadas