Est-ce que les deux extraits de code suivants permettent d'obtenir la même chose?Ces 2 énoncés sont-ils identiques?
Mon code d'origine:
if (safeFileNames != null)
{
this.SafeFileNames = Convert.ToBoolean(safeFileNames.Value);
}
else
{
this.SafeFileNames = false;
}
Quelle pensée ReSharper était une meilleure idée:
this.SafeFileNames = safeFileNames != null &&
Convert.ToBoolean(safeFileNames.Value);
Je pense que le code ci-dessus est beaucoup plus facile à lire, aucune raison impérieuse de le changer?
Exécuterait-il plus vite, et surtout, le code fera-t-il exactement la même chose?
Aussi si vous regardez la section: Convert.ToBoolean(safeFileNames.Value);
, alors sûrement cela pourrait provoquer une exception de référence nulle?
this.SafeFileNames = bool
safeFileNames Local est un objet personnalisé fortement typé, voici la classe:
public class Configuration
{
public string Name
{
get;
set;
}
public string Value
{
get;
set;
}
}
Vous n'obtiendrez un 'NullReferenceExcepton' depuis la première partie de l'instruction 'safeFileNames! = null' court-circut dehors et vous ne frapperez jamais' Convert.ToBoolean (safeFileNames.Value) '- c'est le wa y && travaille. – Nate
Cela ne provoquerait pas une exception de référence nulle à cause de l'évaluation paresseuse de C#. L'instruction && est toujours évaluée côté gauche puis côté droit. Mais si le côté gauche est faux, cela ne dérangera pas d'évaluer le côté droit, puisque le résultat logique est déjà déterminé. Donc, si safeFileNames est null alors l'appel Convert.ToBoolean n'est jamais fait. Ce genre de chose est assez courant dans le code. –
Donc, si je comprends le && - si la partie gauche est fausse, elle renvoie false ... sinon elle évalue la partie droite, et renvoie le résultat de la partie droite? –