प्रदर्शन हिट शायद सबसे नगण्य है, जैसा कि इस उत्तर में बताया गया है ।
तो आइए इस विचार के साथ जाएं कि प्रदर्शन कोई समस्या नहीं है। आप फेंक रहे हैं System.Exception
, बस catch
खंड में निष्पादन को स्थानांतरित करने के लिए । BadControlFlowThatShouldBeRewrittenException
हालांकि फेंकना शायद ओवरकिल होगा।
चलिए इसे तोड़ते हैं। हमारे पास है:
- विधि
GetDataFromServer
(विधि नाम C # में PascalCase होना चाहिए), जो संभवतः एक अपवाद फेंक सकता है, या वापस कर सकता है bool
।
- यदि परिणाम होता
true
, तो दौड़ते ProcessData
।
null
अन्यथा वापस लौटें ।
ऐसा लगता है कि यह कोड जिस पद्धति से लिखा गया है, वह बहुत अधिक काम कर रहा है। GetDataFromServer
एक लौटने bool
एक डिजाइन दोष की तरह दिखता है, मैं करने के लिए है कि विधि की उम्मीद होगी डेटा यह सर्वर से हो रही है वापसी , कुछ IEnumerable<SomeType>
यानी खुश पथ रिटर्न - कि 0 या अधिक आइटम होते हैं n आइटम जहां n> 0 , नहीं-तो-खुश पथ 0 आइटम लौटाता है, और दुखी पथ एक अखंड अपवाद के साथ उड़ता है, जो कुछ भी है।
यह बदल जाता है कि विधि क्या दिखती है, काफी - फिर से यह बताना मुश्किल है कि क्या यह समझ में आता है, क्योंकि मूल पोस्ट में केवल एक निकास बिंदु है (और इस तरह संकलित नहीं होगा, क्योंकि सभी कोड पथ एक मान वापस नहीं करते हैं ), इसलिए यह केवल एक जंगली अनुमान है:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
यहां आप ProcessData
देखेंगे और देखेंगे कि यह पुनरावृत्ति कर रहा है result
, और null
यदि कोई आइटम नहीं है तो वापस लौटता है IEnumerable
।
अब विधि क्यों लौट रही है null
? सर्वर डाउन था? क्या क्वेरी में कोई बग है? कनेक्शन स्ट्रिंग गलत क्रेडेंशियल्स का उपयोग कर रहा है? जब भी GetDataFromServer
आप एक अपवाद के साथ उड़ते हैं, जिसकी आप अपेक्षा नहीं कर रहे हैं, तो आप इसे निगल रहे हैं, इसे कालीन के नीचे हिलाते हुए और एक null
मूल्य लौटाते हैं । मैं इस मामले में विशिष्ट अपवादों को पकड़ने की सलाह देता हूं, और बाकी सब कुछ लॉग करता हूं; डिबगिंग उस तरह से बहुत आसान हो जाएगा।
एक सामान्य catch
क्लॉज के साथ जो अपवाद पर कब्जा नहीं करता है, किसी भी चीज का निदान करना काफी कठिन हो जाता है। मैं इसके बजाय न्यूनतम रूप से ऐसा करूंगा:
catch(Exception e)
{
return null;
}
अब आप कम से कम टूट सकते हैं और निरीक्षण कर सकते हैं e
कि क्या चीजें गलत हैं।
TL; DR : नहीं, प्रवाह नियंत्रण के लिए अपवादों को फेंकना और पकड़ना अच्छा विचार नहीं है।