gpt4 book ai didi

f# - 为什么 F# 不允许 C# 允许的多个属性?

转载 作者:行者123 更新时间:2023-12-04 07:41:12 25 4
gpt4 key购买 nike

以下代码在 C# 中编译:

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

F# 中的以下代码无法编译:
[<ContentType("text")>]
[<ContentType("projection")>]
type Class1() = class end

F# 中的编译错误是:“属性类型‘ContentTypeAttribute’具有‘AllowMultiple=false’。此属性的多个实例不能附加到单个语言元素。”

通过反编译 ContentType,我可以看到 ContentType 继承自 MultipleBaseMetadataAttribute,它在 AttributeUsage 中有 'AllowMultiple=true'。

事实上,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

最佳答案

看起来像一个错误。电子邮件 fsbugs[at]microsoft.com。这是另一个明显的错误:它似乎不尊重 AttributeTargets :

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

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

关于f# - 为什么 F# 不允许 C# 允许的多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12621301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com