7
votes

C # Liste Trier: par les coups de vue chinois

J'ai une page Web, dans laquelle il y a une sorte que je dois commander la liste par les traits chinois.

J'ai créé une application contenant du code comme celui-ci: xxx

Mais il y a une erreur: au moins un objet doit mettre en œuvre IComparable.

Qu'est-ce que cela signifie et comment puis-je le réparer?


0 commentaires

4 Réponses :


3
votes

étudiant doit mettre en œuvre icomparable .


0 commentaires

0
votes
public class Student : IComparable
{
    private string message = null;
    public Student(string message)
    {
        this.message = message;
    }
    #region IComparable Members

    public int CompareTo(object obj)
    {
        // implement your logic, here is a example:
        if (obj != null)
            return message.CompareTo(((Student)obj).message);
        return int.MinValue;
    }

    #endregion
}

6 commentaires

Pourquoi retournez-vous minvalue si obj est null? Cela semble genre de bizarre.


@DANGPH: Cela signifie simplement que tous les étudiants doivent comparer avant null , qui n'est pas déraisonnable.


@Platinum Azure, la DOCS pour dis dire icomparable, "par définition, tout objet se compare supérieur à NULL". C'est donc le mauvais côté. Aussi, pourquoi Minvalue en particulier? Si je voyais que je suppose que cela avait une signification particulière, mais ce n'est pas le cas.


@DANGPH: n'est-ce pas juste une convention?


@Platinum Azure, si vous vous référez aux objets comparant supérieurs à NULL, je dirais que cela fait partie de la spécification pour icomarable, ce n'est pas simplement une convention. Si vous parlez de Minvalue, je dirais que la Convention d'un numéro négatif par défaut est d'utiliser -1.


@Dangph merci Dangph, vous avez raison. Je ne pensais pas trop l'exemple donné, je veux juste retourner un nombre négatif.



7
votes

Vous devez avoir votre Etudiant Classe Implémentez l'interface Icomarable . Cela nécessite la mise en oeuvre d'une méthode comparèteo , qui peut simplement renvoyer le résultat de l'appelant comparète entre les chaînes que vous essayez de commander par exemple.

Par exemple, si le constructeur Initialise un champ nom , vous pouvez avoir quelque chose comme ceci: xxx


0 commentaires

3
votes

Plutôt que de mettre en œuvre icomparable , pourquoi pas simplement utiliser un peu de linq? XXX


1 commentaires

Si j'utilise ce "ordonnance", le résultat n'est pas tout à fait juste. sinon, si la garantie de la table est 'sql_latin1_generaleral_cp1_ci_as', ce n'est pas ce que je veux. Je dois commander la liste avec 'chinois_prc_stroke_cif_as'. Mon E est très pauvre, il y a des erreurs, s'il vous plaît!