以下2個代碼片段是否實現了相同的功能?這兩個陳述是否相同?
我的原代碼:
if (safeFileNames != null)
{
this.SafeFileNames = Convert.ToBoolean(safeFileNames.Value);
}
else
{
this.SafeFileNames = false;
}
什麼ReSharper的想法是一個更好的主意:
this.SafeFileNames = safeFileNames != null &&
Convert.ToBoolean(safeFileNames.Value);
我覺得上面的代碼更易於閱讀,任何令人信服的理由去改變它?
它會執行得更快嗎,而且最重要的是,代碼能夠完成同樣的事情嗎?
此外,如果你看看:Convert.ToBoolean(safeFileNames.Value);
節,那麼肯定這可能會導致空引用異常?
this.SafeFileNames = bool
本地safeFileNames是一個強類型的自定義對象,這裏是類:
public class Configuration
{
public string Name
{
get;
set;
}
public string Value
{
get;
set;
}
}
你不會得到一個'NullReferenceExcepton'由於第一部分的聲明'safeFileNames!= null'將會短路,你永遠不會碰到'Convert.ToBoolean(safeFileNames.Value)' - 那就是wa &&&&作品。 – Nate 2009-12-11 21:41:35
由於C#的懶惰評估,它不會導致空引用異常。 &&語句總是在左側和右側進行評估。但是,如果左邊是錯誤的,那麼它就不會評估右邊,因爲邏輯結果已經確定。所以,如果safeFileNames爲null,那麼Convert.ToBoolean調用永遠不會發生。 這類事情在代碼中很常見。 – 2009-12-11 21:48:21
所以如果我理解&& - 如果左邊的部分是假的,它會返回false ...否則它會評估正確的部分,並返回右邊部分的結果? – 2009-12-11 21:50:11