Comme l'a dit, la raison en est que la concaténation de la valeur null est la même que la concaténation d'une chaîne vide.
Il vaut la peine de se demander pourquoi ce comportement est utile.
Normalement, il y a deux choses sensibles que nous pouvons faire avec un opérateur binaire lorsque l'un des opérandes est nulle:
- Le résultat est null.
- L'opération est un no-op, et nous êtes de gauche avec l'autre opérande.
Il est logique, par exemple, que ((int?)null) + 3
résultats en null
, et en général ce sera le plus utile résultat, ou un nous avons consciemment en garde contre (qui est, nous allons ajouter du code pour attraper la valeur null explicitement).
Mais il y a deux raisons pour ne pas le faire avec la concaténation de chaîne.
La première est de considérer que, puisque la concaténation ne signifie pas un calcul arithmétique, mais en restant deux choses ensemble, alors ce qui est le plus raisonnable résultat de coller null sur le début ou la fin de quelque chose? Il est facile de faire le cas que cela devrait ne rien faire, plutôt que de retourner la valeur null.
La deuxième est que, dans la pratique, il y aura moins de cas où nous voulons a + b + c + d
, avec des cordes à retourner la valeur null si l'un de ceux qui sont nuls, que dans le cas où nous ne serions pas.
Et à partir de cela, il est logique de traiter la valeur null comme une chaîne vide dans les concaténations. À partir de cette base, qui (string)null + (string)null
résultats en ""
est parce que nous n'avons pas un cas particulier pour la concaténation de trop les valeurs null.
Ce cas particulier pourrait être ajouté, mais ensuite, la propriété x + "" == x + null
ne serait plus tenir, ce qui pourrait conduire à une étrange cas.