枚举类型约束返回错误“签名和实现不兼容...”

Hay*_*den 3 f#

我一直在尝试遵循MSDN - Constraints (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)
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

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

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

Fyo*_*kin 5

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

\n\n

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

\n\n
  type Mapper<'TEnum when 'TEnum: enum<uint32> and 'TEnum : equality>() =  \n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n