J'ai une classe générique qui prend un type l'opération de comparaison Intérieur de t code>. Dans cette classe, j'ai une méthode que j'ai besoin de comparer un type t code> à un autre type t code> tel que: MyMethod code> échoue avec une erreur de compilateur CS0019 . Est-il possible d'ajouter une contrainte à t code> pour faire ce travail? J'ai essayé d'ajouter un où T: Icomarable
5 Réponses :
Non, il n'est pas possible, les contraintes de l'opérateur ne sont malheureusement pas autorisées dans C #.
où T: Icomarable
Oui et je ne suis pas sûr que l'OP soit marié à l'utilisation des opérateurs pour cela.
Hmm..Je n'ai pas vraiment compris votre commentaire.
Il voulait dire que l'OP n'est pas obligé d'utiliser ces opérateurs. Il peut utiliser n'importe quelle autre façon, Als Long est-il fonctionne.
Ajout de contrainte pour vous assurer que le type implémente si vous aviez besoin d'autres Les opérateurs numériques que la simple comparaison, la situation est plus difficile, car vous ne pouvez pas ajouter de contrainte à la prise en charge par exemple Icomarable << / code> - l'interface fournit une méthode comparèteo code> pour faire la même chose: + code> et il n'y a pas d'interface correspondante. Certaines idées sur ce peuvent être trouvés ici . < / p> p>
Bon appel Tomas. J'ai trouvé un article de blog à blogs.telerik.com/hristoborisov/ Posts / 09-01-10 / ... concernant ce problème exact peu de temps après que j'ai posé la question qui confirme ce que vous dites.
Vous devez utiliser icomparable comparèteo code> méthode. p>
Ce n'est pas directement possible, mais il y a des solutions de contournement. P>
En fait, vous n'avez besoin de rien de spécial ici. Pour info, voilà comment le linq comparateur .Compare code> qui fera tout ce dont vous avez besoin sans nécessiter de contraintes génériques supplémentaires (qui tendent à se propager horriblement). Il fonctionne pour les deux icomparable icomparable code> et prend en charge les classes, les structures et nullable max / min code> implémentations fonctionne et également liste
C'est impossible = (. Cependant, il y a une bibliothèque de mathématiques open source qui tente de le gérer, de rappeler le nom ...