8

次のコードはC#でコンパイルされます。

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

F#の次のコードはコンパイルされません。

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

F#のコンパイルエラーは次のとおりです。「属性タイプ'ContentTypeAttribute'には'AllowMultiple=false'があります。この属性の複数のインスタンスを単一の言語要素にアタッチすることはできません。」

ContentTypeを逆コンパイルすると、ContentTypeがAttributeUsageに「AllowMultiple=true」を持つMultipleBaseMetadataAttributeを継承していることがわかります。

実際、F#は親クラスからAttributeUsageを継承していないようです。

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

type BarAttribute() =
    inherit FooAttribute()

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

どこ

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

1 に答える 1

8

バグのように見えます。fsbugs[at]microsoft.com に電子メールを送信します。これは別の明らかなバグです: 尊重していないようAttributeTargetsです:

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

[<Foo>]
type T = struct end //happily compiles
于 2012-09-27T14:30:12.340 に答える