2010-05-06 4 views
2

Lequel de ces atteindront le résultat correct:C#: comment construire des chaînes

(1)

int X = 23; 
string str = "HELLO" + X.ToString() + "WORLD"; 

(2)

int X = 23; 
string str = "HELLO" + X + "WORLD"; 

(3)

int X = 23; 
string str = "HELLO" + (string)X + "WORLD"; 

EDIT: Le résultat 'correct' est pour str d'évaluer à: HELLO23WORLD

+0

Ils font tous la même chose. –

+0

Je dois le dire, Quel est le résultat correct? – LizB

+0

Eh bien, à part le fait qu'il n'y a pas de 'toString()' en C#, c'est 'ToString()'. –

Répondre

4

Option 3 ne compile pas parce que vous ne pouvez pas jeter un coup int à string.

Les deux autres produisent le même résultat. Cependant, il y a une différence subtile. En interne, l'opérateur plus se compile pour appeler String.Concat. Concat a des surcharges différentes. L'option 1 appelle Concat(string, string, string) tandis que l'option 2 appelle Concat(object, object, object) avec deux chaînes et un entier boxed. En interne Concat puis appelle ToString sur le boxed int.

Vérifiez également cette question connexe: Strings and ints, implicit and explicit

+0

Pourquoi l'option 2 n'appelle pas ToString() sur l'int et utilise la surcharge Concat (string, string, string)? – CJ7

+1

Je suppose que c'est parce qu'il rend la génération de code pour l'appelant plus simple en laissant la méthode Concat faire tout le travail. –

7
int X = 23; 
string str = string.Format("HELLO{0}WORLD", X); 
+0

S'il vous plaît laissez un commentaire lors d'un vote en baisse. Y at-il quelque chose qui ne va pas avec ma réponse? –

+0

-1: la question a demandé lequel des trois segments de code a produit un résultat correct, mais votre réponse est toujours utile car elle montre une méthode alternative, mais elle ne répond pas à la question – CJ7

+0

+1: ** beaucoup ** mieux que concaténer cordes. Il se sent mal que le répondant ait été pénalisé simplement parce qu'il n'a pas expliqué pourquoi c'est une meilleure option que les 3 affichés dans la question. – ANeves

1

vous pouvez utiliser StringBuilder aussi:

System.Text.StringBuilder str = new System.Text.StringBuilder(); 
str.Append("HELLO"); 
str.Append(X); 
str.Append("World"); 
Questions connexes