क्या निम्नलिखित 2 कोड स्निपेट एक ही चीज़ प्राप्त करते हैं?क्या ये 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' पहले भाग के बाद से कथन का 'सुरक्षितफाइल नाम! = नल' शॉर्ट-सर्किट आउट होगा और आप कभी भी कन्वर्ट नहीं करेंगे। ToBoolean (safeFileNames.Value) '- वह वा वाई एंड एंड काम करता है। – Nate
सी # के आलसी मूल्यांकन के कारण यह एक शून्य संदर्भ अपवाद नहीं करेगा। && कथन हमेशा बाईं तरफ बाईं ओर मूल्यांकन किया जाता है। लेकिन यदि बाएं तरफ झूठ है, तो यह सही पक्ष का मूल्यांकन करने से परेशान नहीं होगा, क्योंकि तार्किक परिणाम पहले ही निर्धारित है। इसलिए, अगर सुरक्षितफाइल नाम शून्य है तो कनवर्ट करें। ToBoolean कॉल कभी नहीं बनाया जाता है। इस तरह की चीज कोड में काफी आम है। –
तो अगर मैं समझ रहा हूं && - यदि बाएं भाग झूठा है तो यह झूठा रिटर्न देता है ... अन्यथा यह सही हिस्से का मूल्यांकन करता है, और सही हिस्से का परिणाम देता है? –