<p><strong>Mise a jour :</strong> Le compilateur Roslyn a ete mis a jour pour rendre le comportement des deux operateurs identique <em>lorsqu’il n’y a pas d’operateur d’egalite surcharge</em>. Veuillez consulter le <a href="http://tryroslyn.azurewebsites.net/#b:master/f:%3Eilr/K4Zwlgdg5gBAygTxAFwKYFsDcAoADsAIwBswBjGUogQxBBgGEYBvbGNmAge06JgFkAjAApOBAFapSyGAA8AlDAC8APlkwwdCMCJEcASC49+AJhHjJ0+UtUylimFp04AvkA==">code dans les resultats actuels du compilateur</a> (<code>M1</code> et <code>M2</code> dans le code) qui montre ce qui se passe lorsqu’il n’y a pas de comparateur d’egalite surcharge. Ils ont tous les deux maintenant le comportement <code>==</code> plus performant. S’il y a un comparateur d’egalite surcharge, <a href="https://sharplab.io/#v2:EYLgtghgzgLgpgJwDQxASwDYB8ACAGAAhwEYBuAWACgqcBmIgJgIGECBvKgrg4Ae14wEAssQAUrAB4BKAgF4AfAQkE0UAgDsArhgwVKASD4DhDcUpkKlc2Ru27O3B1zTqYSvdyL1mol2+lsMAAWqgB0ErISpAC+Tl5ExABsPPyCvAAOiBAwvAiyNma8xEgsBLwMFopF4dZlDOEe3HQJyUZpmQjZuQCEBaxFJf0VltXKvXUNcc28AG6ICGgAJnApxgCiAI6aEBhQorzAAFZwAMZu5ZUEouJSFzX57lP0s/NLK34EAOJwMAAS0EFmLxlqJLhJQt8/gCgSCpHpokA==">le code differe toujours</a>.</p>
<p>Consultez ci-dessous pour l’analyse des anciennes versions du compilateur Roslyn.</p>
<p>Pour <code>null</code>, il n’y a pas de difference avec ce a quoi nous sommes habitues en C# 6. Cependant, les choses deviennent interessantes lorsque vous changez <code>null</code> pour une autre constante.</p>
<p>Prenez cet exemple :</p>
<pre><code class="lang-auto">Test(1);
public void Test(object o)
{
if (o is 1) Console.WriteLine("a");
else Console.WriteLine("b");
}
</code></pre>
<p>Le test donne <code>a</code>. Si vous comparez cela avec <code>o == (object)1</code> que vous auriez normalement ecrit, cela fait une grande difference. <code>is</code> prend en compte le type de l’autre cote de la comparaison. C’est pratique !</p>
<p>Nous pensons que le pattern constant <code>== null</code> vs. <code>is null</code> est simplement quelque chose de tres familier “par accident”, ou la syntaxe de l’operateur <code>is</code> et de l’operateur d’egalite donnent le meme resultat.</p>
<p>Comme <a href="https://stackoverflow.com/users/41071/svick">svick</a> l’a commente, [<code>is null</code> appelle <code>System.Object::Equals(object, object)</code> tandis que <code>==</code> appelle <code>ceq</code>](<a href="http://tryroslyn.azurewebsites.net/#b:master/f:%3Eilr/K4Zwlgdg5gBAygTxAFwKYFsDcAoAD" class="inline-onebox">SharpLab</a></p>
<p><em>(Reponse tronquee)</em></p>