C# में त्रुटि प्रबंधन: try/catch और A से Z तक
\n\nकोई भी एप्लिकेशन, यहां तक कि सबसे अनुभवी डेवलपर द्वारा लिखा गया, अप्रत्याशित स्थितियों का सामना कर सकता है: नेटवर्क विफलता, डिस्क पर फ़ाइल का न होना, शून्य से भाग, या गलत डेटा इनपुट। C# (.NET) में ऐसी स्थितियों को प्रबंधित करने के लिए अपवाद (exceptions) तंत्र का उपयोग किया जाता है। इस लेख में, हम त्रुटि प्रबंधन के बारे में वह सब कुछ समझेंगे जो आपको जानना चाहिए: मूल try/catch संरचना से लेकर अपने स्वयं के अपवाद प्रकार बनाने और आधुनिक best practices तक।
1. मूल बातें: try/catch/finally संरचना
\n\nC# में, त्रुटि प्रबंधन तीन मुख्य ब्लॉकों पर आधारित है: try, catch और finally।
- \n
- try — इसमें वह कोड होता है जो अपवाद फेंक सकता है। \n
- catch — किसी विशिष्ट अपवाद को पकड़ता और संभालता है। \n
- finally — हमेशा निष्पादित होता है, भले ही अपवाद हुआ हो या नहीं (आमतौर पर संसाधनों को मुक्त करने के लिए)। \n
try\n{\n int[] numbers = { 1, 2, 3 };\n Console.WriteLine(numbers[5]); // IndexOutOfRangeException\n}\ncatch (IndexOutOfRangeException ex)\n{\n Console.WriteLine($"त्रुटि: {ex.Message}");\n}\nfinally\n{\n Console.WriteLine("finally ब्लॉक हमेशा निष्पादित होता है।");\n}\n\nआप विभिन्न प्रकार के अपवादों के लिए कई catch ब्लॉक का उपयोग कर सकते हैं। प्रसंस्करण ऊपर से नीचे होता है, इसलिए अधिक विशिष्ट अपवादों को सामान्य अपवादों से ऊपर रखा जाना चाहिए।
try\n{\n // खतरनाक कोड\n}\ncatch (DivideByZeroException ex)\n{\n Console.WriteLine("शून्य से भाग!");\n}\ncatch (Exception ex) // सामान्य कैच\n{\n Console.WriteLine($"एक त्रुटि हुई: {ex.Message}");\n}\n\n2. अपवाद उत्पन्न करना: throw ऑपरेटर
\n\nकभी-कभी आपको किसी गलत स्थिति के बारे में स्पष्ट रूप से सूचित करने की आवश्यकता होती है। इसके लिए throw ऑपरेटर का उपयोग किया जाता है। आप मानक अपवाद या अपना स्वयं का अपवाद फेंक सकते हैं।
public void ValidateAge(int age)\n{\n if (age < 0 || age > 150)\n {\n throw new ArgumentOutOfRangeException(nameof(age), "आयु 0 से 150 के बीच होनी चाहिए।");\n }\n Console.WriteLine("आयु सही है।");\n}\n\nएक throw; (बिना तर्कों के) संरचना भी है - इसका उपयोग catch ब्लॉक के अंदर उसी अपवाद को पुनः उत्पन्न करने के लिए किया जाता है। यह तब उपयोगी होता है जब आप त्रुटि को लॉग करना चाहते हैं, लेकिन इसे दबाना नहीं चाहते।
try\n{\n // कोड\n}\ncatch (Exception ex)\n{\n Log.Error(ex); // लॉग में रिकॉर्ड\n throw; // पुनः उत्पन्न करना — अपवाद आगे बढ़ता है\n}\n\n3. स्वयं के अपवाद बनाना (Custom Exceptions)
\n\nव्यावसायिक तर्क के लिए, अक्सर अपने स्वयं के अपवाद प्रकारों का उपयोग करना अधिक सुविधाजनक होता है। यह कोड को अधिक पठनीय बनाता है और विशिष्ट त्रुटियों को सटीक रूप से संभालने की अनुमति देता है।
\n\nकस्टम अपवाद बनाने के नियम:
\n- \n
- क्लास को
Exception(याApplicationExceptionसे, लेकिनExceptionसे बेहतर) से इनहेरिट करें। \n - तीन मानक कंस्ट्रक्टर लागू करें (बिना पैरामीटर, संदेश के साथ, संदेश और आंतरिक अपवाद के साथ)। \n
- क्लास के नाम में
Exceptionप्रत्यय जोड़ने की अनुशंसा की जाती है। \n
public class UserNotFoundException : Exception\n{\n public UserNotFoundException() { }\n\n public UserNotFoundException(string message) : base(message) { }\n\n public UserNotFoundException(string message, Exception inner) : base(message, inner) { }\n}\n\n// उपयोग\nthrow new UserNotFoundException("आईडी 123 वाला उपयोगकर्ता नहीं मिला।");\n\n4. Best practices: खुद को और प्रोजेक्ट को कैसे नुकसान न पहुँचाएँ
\n\nत्रुटि प्रबंधन केवल सब कुछ try/catch में लपेटना नहीं है। यहाँ कुछ सुनहरे नियम दिए गए हैं जिनका C# (.NET) में पालन किया जाना चाहिए: