3 votes

Enum Type Constraint renvoie l'erreur "La signature et l'implémentation ne sont pas compatibles..."

J'ai essayé de suivre le guide de MSDN - Contraintes (F#) lors de la création d'un type dans un module qui a une contrainte de type générique d'une énumération, comme suit :

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

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

Cependant, j'obtiens l'erreur suivante :

La signature et la mise en œuvre déclaration du paramètre de type "TEnum" nécessite une contrainte de la forme de la forme "TEnum : égalité

Existe-t-il un moyen de corriger cet exemple de code afin que je puisse contraindre un type à une énumération ?

4voto

Fyodor Soikin Points 7907

Cela provient de l'instanciation de Dictionary<,> . F# dispose d'un cas particulier pour ce type : il ajoute un élément equality à sa contrainte de TKey paramètre générique¹, car les clés du dictionnaire doivent être comparables, sinon le dictionnaire ne peut pas fonctionner.

Vous pouvez remédier à ce problème en ajoutant la contrainte à votre 'TEnum paramètre :

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

¹ même si la définition originale du type n'a pas cette contrainte, parce que le type est défini en C#

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X