¿Los siguientes 2 fragmentos de código logran lo mismo?¿Son estas 2 declaraciones idénticas?
Mi código original:
if (safeFileNames != null)
{
this.SafeFileNames = Convert.ToBoolean(safeFileNames.Value);
}
else
{
this.SafeFileNames = false;
}
Qué pensamiento ReSharper era una idea mejor:
this.SafeFileNames = safeFileNames != null &&
Convert.ToBoolean(safeFileNames.Value);
creo que el código anterior es mucho más fácil de leer, ninguna razón de peso para cambiarlo?
¿Se ejecutará más rápido, y lo más importante, el código hará exactamente lo mismo?
Además, si nos fijamos en la sección: Convert.ToBoolean(safeFileNames.Value);
, ¿entonces esto podría causar una excepción de referencia nula?
this.SafeFileNames = bool
safeFileNames local es un objeto personalizado inflexible, aquí es la clase:
public class Configuration
{
public string Name
{
get;
set;
}
public string Value
{
get;
set;
}
}
Usted no recibirá un 'NullReferenceExcepton' ya que la primera parte de la declaración 'safeFileNames! = null' cortará en cortocircuito y nunca golpearás' Convert.ToBoolean (safeFileNames.Value) '- esa es la y el && funciona. – Nate
No causaría una excepción de referencia nula debido a la evaluación perezosa de C#. La instrucción && siempre se evalúa a la izquierda y luego a la derecha. Pero si el lado izquierdo es falso, no molestará evaluar el lado derecho, ya que el resultado lógico ya está determinado. Entonces, si safeFileNames es nulo, entonces la llamada Convert.ToBoolean nunca se realiza. Este tipo de cosas es bastante común en el código. –
Entonces, si comprendo que && - si la parte izquierda es falsa, devuelve falso ... de lo contrario, evalúa la parte correcta y devuelve el resultado de la parte correcta. –