L'ajout d'un string
à n'importe quoi dans .NET provoquera l'appel de la méthode .ToString
de cet objet et traitera l'ajout comme une concaténation de chaîne. La même chose se produirait si vous n'utilisiez pas un dynamic
.
Action a = new Action(() => Console.WriteLine());
Console.WriteLine(a + "???"); // outputs "System.Action???"
Tout Action
retournera System.Action
lorsque sa méthode .ToString
est appelée.
La seule différence entre +=
dans l'exemple d'origine et +
dans cet exemple est que vous définissez le résultat de la concaténation dans la variable dynamique. Il serait équivalent à:
object a = new Action(() => Console.WriteLine());
a = a + "???"; // The same as: a = a.ToString() + "???";
Console.WriteLine(a);
si j'utilise un autre type pour 'a' il donnerait une exception –
@OrlandoWilliam: oui, bien sûr. La raison en est (j'ai essayé d'expliquer dans ma réponse, peut-être que je n'étais pas clair, désolé) qu'il n'y a pas de _ _ convertisseur "_ entre Action et d'autres types mais la chaîne ... – Marco
@OrlandoWilliam: Non ce ne serait pas. Tout objet peut être converti en chaîne de cette manière. Essayez: 'object a = 2; a + = "???"; Console.WriteLine (a); ', par exemple. – StriplingWarrior