Qu'est-ce qui se passe ci-dessous? pourquoi est i code> est converti en chaîne dans les deux cas. Je me confonde avec l'idée de la priorité de l'opérateur (bien que cet exemple ne montre pas beaucoup de cela) et la direction d'évaluation. Parfois, l'évaluation arrive de gauche à droite ou inversement. Je ne connais pas exactement la science de la façon dont l'expression est évaluée ... p>
i code> converti en chaîne dans l'exemple ci-dessus et ne donne pas à une erreur de compilation? p> p>
4 Réponses :
Dans les deux cas, vous avez l'opérateur Autant que je sache, le compilateur C # n'utilisera que la concaténation de chaînes pour un scénario de + code> avec la chaîne comme un em> des opérandes. Il n'y a pas d'opérateurs définis par l'utilisateur surchargé impliqué, de sorte que le compilateur utilisera em> de ceux que des situations de concaténation de chaînes. P>
x + y code> où em>
x code > ou
y code> est une expression code> string code> au moment de la compilation s'il existe une surcharge définie par l'utilisateur, par exemple
opérateur xName + (xNamespace, chaîne ) code>
opérateur. P>
de la spécification C # Spec - Section 7.7.4 Opérateur d'addition:
Concaténation de chaîne forte>: p> string operator +(string x, string y); string operator +(string x, object y); string operator +(object x, string y);
Merci - je n'ai pas pu arriver à la spécification rapidement :)
En réalité, l'opérateur "+" est pour la concaténation. Faire une concaténation entre une INT et une chaîne donnera une chaîne (avec une chaîne automatiquement à la chaîne) p>
L'utilisation de "+" entre les variables numériques dans la console.Writeine entraînera une somme de celles des variables numériques dans la sortie.
Je me confondre avec l'idée de la prévention de l'opérateur et de la direction de l'évaluation. p>
Non, vous n'êtes pas. Qui est souvent confondu, oui, mais ce n'est pas la chose que vous êtes confus, car aucun ordre d'évaluation n'est pertinent em> à la question de savoir si l'entier est converti à une chaîne ou pourquoi il est légal Pour ajouter un entier à une chaîne. P>
Pour vous être confondu sur le point que vous prétendez être confus, les règles sont assez simples: p>
- Les expressions sont parenthèses selon la préséance et l'associativité de l'opérateur. LI>
- Les subexpressions sont évaluées dans l'ordre de gauche à droite. LI> ul>
C'est tout ce que vous devez savoir pour le faire correctement. Supposons Q () renvoie un objet comportant un indexeur avec un seigter et les autres méthodes de retour des entiers: p>
xxx pré> entre parenthèses en fonction de la priorité et de l'associativité: P >
int i = 10; string k = "Test"; string t1 = System.String.Concat((object)i, (string)k); Console.WriteLine(t1); string t2 = System.String.Concat((string)k, (object)i); Console.WriteLine(t2);
J'aime ta réponse. Mais je ne suis pas sûr de la dernière partie: si par spécification, vous voulez dire que l'opérateur + est défini comme @Brokenglass mentionné, je suis d'accord ...