10
votes

ToString remplissant () et ajout à la liste de la liste C #

Quelqu'un peut-il peut-on expliquer ceci:

MessageBox.Show(test.ToString());


0 commentaires

5 Réponses :


0
votes

ne doit-il pas être comme ceci: xxx

Je suppose que votre liste contient un type de chaîne?

Je ne sais pas si tel est correct cependant, je ne l'ai pas testé.


1 commentaires

Bien sûr, cela fonctionne - mais ajoutez () reçoit un objet et n'est-il pas simplement appeler objet.tostring () qui est virtuel? Si je change de classe à hériter de l'objet ça marche ...



0
votes

Les éléments dans une liste de liste sont une collection d'objets, pas de chaînes.

voir MSDN: Listbox.ObjectCollection Méthode .Add

Par conséquent, vous devez ajouter l'instance en tant que chaîne (ex: listbox1.items.add (test.tostring ()); ) à l'extrémité avant ou sur le backend lors de l'examen La liste Vous devez appeler Tostring (ex: listbox1.items [0] .tostring (); ).


1 commentaires

Non - Si vous étiez correct, pourquoi ajouter un INT à une liste de liste? Il appelle la méthode de ToString virtuel () dans l'objet. Si je chante ma classe pour hériter d'un objet, cela fonctionne aussi bien ...



5
votes

Définissez l'affichage sur la liste de la liste sur la propriété du type de test.

public class Test : List<Int32>
{
    public String Name { get { return this.ToString(); } }

    public override string ToString()
    {
        return "Test";
    }
}


1 commentaires

Oui, je sais que aussi ... La question est de savoir pourquoi pas listbox.items.add CallInting My Tostring remplacé ()?



8
votes

Pour que cela fonctionne, vous devez désactiver la mise en forme:

listBox1.FormattingEnabled = false;


1 commentaires

Je ne peux pas croire que les boîtes de liste fonctionnent de cette façon. Il m'a fallu pour toujours pour même comprendre la combinaison correcte de mots à Google pour trouver cette question pour résoudre le problème. Terrible. Bonne réponse cependant.



0
votes

Je suis tombé sur ça aussi (et un autre merci, Manji!). J'ai eu quelque chose comme ceci:

public override string ToString()
    {
        return string.Concat("[", MessageTime.ToString("yyyy-MM-dd HH:mm:ss.fffff"), "] ", MessageText);
    }


0 commentaires