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

时间:2017-11-12 02:31:50

标签: 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)

但是,我收到了错误:

  

签名和实现不兼容,因为   声明类型参数&#39; TEnum&#39;需要一个约束   形式&#39; TEnum:平等

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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