2009-08-10 10 views
0

Je ne suis pas sûr comment rendre la question plus claire mais c'est basiquement le problème:Comment renvoyer une chaîne composée dans une fonction ToString substituée?

J'ai une classe qui est dervived d'un autre de mes classes. La classe de base a une fonction Tostring surchargée (renvoie 2 chaînes séparées par deux points). Le problème est que ma classe dérivée peut avoir un tableau de chaînes ou juste une chaîne de caractères, donc quand je remplace la fonction ToString, je dois retourner la classe de base ainsi que le tableau de chaînes (séparées par "\ n") dans la classe dérivée. Maintenant, je me demande quelle serait la meilleure façon de faire cela; devrais-je retourner un tableau de chaînes (si possible) ou est-ce que je n'ai pas d'autre choix que d'utiliser la classe Stringbuilder? S'il y a une autre façon de le faire, dites-le .. Toutes les idées sont les bienvenues, peu importe leur folie :)

Répondre

12

En remplaçant ToStringavez pour renvoyer juste une chaîne. Vous ne pouvez pas retourner un autre type. On dirait que vous voudrez peut-être quelque chose comme ceci:

public override ToString() 
{ 
    return base.ToString() + "\n" + string.Join("\n", stringArray); 
} 

C'est en supposant que vous voulez retourner une chaîne telle que:

base1:base2 
this1 
this2 
this3 

où les séparateurs de ligne sont \n.

+0

Merci beaucoup –

+0

Vous devriez utiliser 'Environment.NewLine' pour le séparateur, à moins qu'il y ait une exigence spécifique de ne pas le faire, où une implémentation' ToString() 'ne serait généralement pas l'une des exceptions. :) –

+0

Je passais juste par la "spécification" dans la chaîne. Je ne suis même pas sûr d'être d'accord avec votre recommandation, c'est comme si vous utilisiez 'Encoding.Default'. Sans savoir où la chaîne va être utilisée, personne ne peut savoir ce qu'est le terminateur de ligne droite. –

0

Vous pouvez utiliser la valeur de retour de ToString() à partir de la classe de base.

Vous pouvez y accéder en

base.ToString();

1

Il me semble qu'il y a quelque chose d'imparfait dans votre conception, mais compte tenu de ce que vous avez dit, il n'y a aucun moyen de retourner un tableau de chaînes de la méthode ToString(). Vous devrez donc délimiter la valeur de retour ToString() de la classe de base avec le dérivé.

Tels que

public override string ToString() 
{ 
    return base.ToString() + ':' + "whatever"; 
} 
2

Que voulez-vous dire par « retourner la classe de base ainsi que le tableau de chaînes »?

Si vous vouliez dire la méthode de la classe de base, vous pouvez essayer ToString():

base.ToString() + "\n" + String.Join("\n", theStringArray); 
+0

Je voulais dire retourner la méthode ToString de la classe de base ainsi que le tableau de chaînes de ma classe dérivée –

1

Comme Henri mentionné, le retour base.ToString(), vous pouvez remplacer le côlon avec le \ n chaîne en utilisant .Remplacez et combinez-le avec votre nouvelle chaîne dérivée.

Bien sûr, vous pouvez simplement utiliser une chaîne dans votre classe dérivée qui prend la forme de "chaîne \ n chaîne" et dans la fonction ToString, vous effectuez simplement l'étape remplacer et ensuite combiner les deux chaînes ensemble. Aucun tableau, aucun stringbuilder, nécessaire. Si vous pensez que leur nombre de chaînes de caractères sera faible, cela peut être l'option la plus simple. Pas de tableaux ou de stringbuilder.

1

En règle générale, il est préférable d'utiliser Stringbuilder plutôt que de concaténer des chaînes en utilisant une longue ligne d'opérations +.

Si vous effectuez les opérations suivantes:

string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken."; 

Cela fait créer sept chaînes en mémoire.

  1. "Ce i"
  2. "s un exa"
  3. "Ceci est un exa"
  4. "PLE à"
  5. "Ceci est un exemple chaîne tha"
  6. « t a été cassé."
  7. "Ceci est un exemple de chaîne qui a été rompu."

L'utilisation du StringBuilder pour la même fonctionnalité ne créer cinq, et que l'échelle monte StringBuilder fera un travail plus rapide de concaténer toutes ces cordes ensemble que simplement l'exécution d'un groupe de + opérateurs les uns après les autre.

Ceci est particulièrement vrai lorsque votre liste de concaténations n'est pas prédéterminée à l'avance, comme c'est le cas avec votre tableau d'objets string.

Questions connexes