4 votes

Quelle est la meilleure façon de forcer ma classe conteneur à n'accepter que les objets qui implémentent IComparable ?

J'apprends le C#. Je fais les exercices ci-dessous pour utiliser les fonctionnalités.

Cette classe fait office de conteneur :

class myContainer<T> : List<T>

Lorsque j'ajoute cette structure au conteneur, tout fonctionne bien car elle possède une implémentation de IComparable.

interface bla<T> : IComparable<T> {}
struct IString : bla<IString>

Lorsque j'ajoute une classe qui n'a pas implémenté IComparable par le biais d'une interface ou directement, j'obtiens une erreur au moment de l'exécution si je fais quelque chose comme Sort()

Quelle est la meilleure façon de forcer ma classe conteneur à n'accepter que les objets qui implémentent IComparable ?

merci

14voto

David Pfeffer Points 12792
class myContainer<T> : List<T>
    where T : IComparable<T>
{
    ...
}

Si possible, vous pourriez également envisager de soutenir IComparable (la version non-générique) pour votre classe.

Cet article de MSDN sur les contraintes génériques a plus d'informations sur le where expression.

3voto

Nick Craver Points 313913

Vous pouvez restreindre via une clause where comme ceci :

class myContainer<T> : List<T> where T : IComparable<T>

1voto

TomTom Points 35574

Classe mycontainer : Liste où T : IComparable

Exiger de T qu'il implémente IComparable. Recherchez le mot-clé WHERE pour cela ;)

1voto

Joseph Points 18099

Vous devez ajouter un where à votre classe pour contraindre le type.

Vous avez donc besoin de quelque chose comme ça :

class myContainer<T> : List<T>
    where T: IComparable<T>

1voto

Paolo Tedesco Points 22442

Utilisez le where pour imposer une contrainte sur le paramètre de type générique :

class myContainer<T> : List<T> where T : IComparable<T> {
}

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