Question concernant C# " s " Liste<>.ToString`
Pourquoi ne pas C# List<>
's ToString
méthode de fournir un sensible représentation de chaîne qui imprime à son contenu? Je reçois le nom de la classe (ce qui je suppose est la valeur par défaut object.ToString
mise en œuvre) lorsque j'essaie d'imprimer un List<>
objet. Pourquoi donc?
- Voir les édité question.
- Vous ne voulez pas un
OutOfMemoryException
pour une grande liste. - Dans ce cas, il suffit d'imprimer d'abord quelques éléments et ensuite une ellipse de la marque.
- trop d'intelligence pour une méthode que 99.9% de temps de vous ne les utilise pas parce que vous avez besoin de la chaîne d'une autre façon...
- les points de suspension sont mauvais parce que généralement, l'idée est de ToString pour être en mesure d'Aller si il y a une mise en œuvre concrète. Avec les points de suspension qui allait se briser. Encore moins dire qu'il serait inutile sans un moyen de spécifier quand les points de suspension doivent être des lieux. En outre, il est encore plus compliqué parce qu'une liste peut contenir une référence à lui-même dans son contenu qui entraînerait une récursivité infinie quand ToStringing les éléments de contenu.
InformationsquelleAutor missingfaktor | 2011-02-19
Vous devez vous connecter pour publier un commentaire.
La réponse est simple: c'est juste la façon dont il est, je le crains.
De même
List<T>
ne modifie pasGetHashCode
ouEquals
. Notez qu'il n'aurait que très peu de mise en forme agréablement autre que d'appeler la simpleToString
lui-même, peut-être par des virgules séparant les valeurs.Vous pouvez toujours écrire votre propre extension de la méthode à exécuter approprié de la mise en forme si vous le souhaitez, ou utilisez le plus récent des surcharges de
string.Join
qui rendent assez simple:string.Join
.string.Join(',', list);
àstring.Join(",", list);
(changé de char à chaîne)Je pense que la raison est, qu'il est difficile de savoir ce qu'il doit réellement faire.
Peut-être faire ToString sur jamais elemenat et de les séparer par des virgules? Mais si quelqu'un veut des points-virgules? Ou des tirets? Ou quelqu'un veut se joindre ensemble de la chaîne en bouclés ou normal braclets? Ou la somone veut utiliser des fonctions différentes pour obtenir la représentation textuelle de l'élément unique?
Quelques choses à noter: ToString doit être utilisé uniquement pour le débogage purpouses. Si vous souhaitez exporter vos données en chaîne, soit remplacer ce comportement dans votre classe, ou de faire une classe utilitaire pour elle.
Également la Liste est conçu pour stocker les éléments, de ne pas fournir leur représentation textuelle.
Parce que c'est probablement pas facile à mettre en œuvre.
Un
List<>
peut contenir beaucoup de choses. Par exemple un autreList<>
qui contient unDictionary<>
qui contient des objets complexes...List
fournit. Qu'avez-vous à dire à ce sujet?