2017-11-12 8 views
2

を次のように私は、列挙型のジェネリック型の制約を持つモジュール内のタイプを作成する上MSDN - Constraints (F#)からのガイドに従うことをしようとしてきました:私は列挙型に種類を制限することができるよように、このコード例を修正する方法が列挙型制約は、「署名と実装は互換性がありません...」というエラーを返す

The signature and implementation are not compatible because the declaration of the type parameter 'TEnum' requires a constraint of the form 'TEnum : equality

あります:

type Mapper<'TEnum when 'TEnum : enum<uint32>>() = 
    let dict = new Dictionary<'TEnum, string>() 

    member this.Add (key: 'TEnum) (value: string) = 
     dict.Add(key, value) 

は、しかし、私はエラーを取得していますか?

+0

あなたはあなたのコードの多くを示すことがあります。このエラーは、TEnum' ' '型の値のどこか(' = '演算子と)比較しているが、あなたはその場所が表示されないことを意味しています。 –

+0

@FyodorSoikinは質問を更新しました – Hayden

答えて

3

これはDictionary<,>のインスタンス化から来ています。 F#が、このタイプのための特別なケースがありますだけでなく、辞書のキーは同等であることが持っているので、それは、そのTKeyジェネリックparameter¹にequality制約を追加し、そうでない場合は辞書が機能することはできません。

あなたの'TEnumパラメータに制約を追加することによってこの問題を解決することができます。typeは、C#のに定義されているため

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

は、元の型の定義は、この制約を持っていないにもかかわらず、を¹しました

関連する問題