枚举类型约束返回错误"The signature and implementation are not compatible..."



我一直在尝试遵循MSDN - 约束(F#(中的指南,在具有枚举泛型类型约束的模块中创建类型,如下所示:

type Mapper<'TEnum when 'TEnum : enum<uint32>>() = 
    let dict = new Dictionary<'TEnum, string>()
    member this.Add (key: 'TEnum) (value: string) = 
        dict.Add(key, value)

但是,我收到错误:

签名和实现不兼容,因为 类型参数 'TEnum' 的声明需要约束 形式 'TEnum : 平等

有没有办法修复此代码示例,以便我能够将类型限制为枚举?

这来自 Dictionary<,> 的实例化。F# 对于此类型有一个特殊情况:它向其TKey泛型参数¹添加equality约束,因为字典键必须具有可比性,否则字典将无法运行。

您可以通过将约束添加到'TEnum参数来解决此问题:

  type Mapper<'TEnum when 'TEnum: enum<uint32> and 'TEnum : equality>() =  

¹即使原始类型定义没有此约束,因为类型是在 C# 中定义的

最新更新