Custom exceptions; error design
छोटे custom exceptions बनाएँ, सही अंतर्निहित प्रकार चुनें (ArgumentException, InvalidOperationException) और InnerException के साथ संदर्भ जोड़ें।
Custom exceptions; error design, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 3 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
उद्देश्य और लक्ष्य
उद्देश्य: त्रुटियों को स्पष्ट और पकड़ने योग्य बनाना।
- विशिष्ट विफलता के लिए विशिष्ट प्रकार इस्तेमाल करें
- अच्छा संदेश और संदर्भ के लिए InnerException
- जहाँ उपयुक्त हों, अंतर्निर्मित प्रकारों को प्राथमिकता दें
कस्टम अपवाद प्रकार
Exception से व्युत्पन्न करें, नाम का अंत Exception से करें और मानक कंस्ट्रक्टर जोड़ें। छोटा और उपयोगी डेटा रखें।
using System;
// Custom, specific to our domain
public sealed class ConfigNotFoundException : Exception
{
public string Key { get; private set; }
public ConfigNotFoundException(string key)
: base("Config key not found: " + key)
{
Key = key;
}
public ConfigNotFoundException(string key, Exception inner)
: base("Config key not found: " + key, inner)
{
Key = key;
}
}
public class Program
{
public static void Main(string[] args)
{
try
{
throw new ConfigNotFoundException("ApiUrl");
}
catch (ConfigNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
}
संदर्भ के लिए InnerException
मूल कारण बनाए रखने के लिए निचले स्तर के अपवादों को डोमेन अपवाद में लपेटें और InnerException सेट करें।
using System;
using System.IO;
public sealed class ConfigNotFoundException : Exception
{
public string Key { get; private set; }
public ConfigNotFoundException(string key, Exception inner)
: base("Config key not found: " + key, inner) { Key = key; }
}
public static class Config
{
public static string Load(string path, string key)
{
try
{
string[] lines = File.ReadAllLines(path); // may throw
for (int i = 0; i < lines.Length; i++)
{
int idx = lines[i].IndexOf("=");
if (idx > 0 && lines[i].Substring(0, idx) == key)
return lines[i].Substring(idx + 1);
}
throw new ConfigNotFoundException(key, null);
}
catch (IOException io)
{
// Wrap low-level error with domain meaning
throw new ConfigNotFoundException(key, io);
}
}
}
public class Program
{
public static void Main(string[] args)
{
try
{
Console.WriteLine(Config.Load("missing.cfg", "ApiUrl"));
}
catch (ConfigNotFoundException ex)
{
Console.WriteLine("Top: " + ex.Message);
if (ex.InnerException != null)
Console.WriteLine("Inner: " + ex.InnerException.GetType().Name);
}
}
}
पहले अंतर्निर्मित प्रकार चुनें
सामान्य समस्याओं के लिए अंतर्निर्मित प्रकार इस्तेमाल करें: ArgumentNullException, ArgumentOutOfRangeException, FormatException, InvalidOperationException आदि।
using System;
public static class MathUtil
{
public static int Divide(int a, int b)
{
if (b == 0) throw new DivideByZeroException();
return a / b;
}
public static int ParsePositive(string text)
{
if (text == null) throw new ArgumentNullException("text");
int value = int.Parse(text); // may throw FormatException
if (value <= 0) throw new ArgumentOutOfRangeException("text", "must be > 0");
return value;
}
}
public class Program
{
public static void Main(string[] args)
{
try { Console.WriteLine(MathUtil.ParsePositive("-1")); }
catch (ArgumentOutOfRangeException ex) { Console.WriteLine("Range: " + ex.ParamName); }
}
}
अपवाद और सुरक्षा-जाँच
असाधारण स्थितियों के लिए अपवाद इस्तेमाल करें। अपेक्षित विफलताओं के लिए TryX सुरक्षा-जाँच या वापसी कोड को प्राथमिकता दें।
using System;
public static class Parser
{
// BAD: using exceptions for expected cases
public static int ParseOrThrow(string s)
{
return int.Parse(s); // will throw often for user input
}
// GOOD: guard-check pattern for expected failure
public static bool TryParsePositive(string s, out int value)
{
value = 0;
int tmp;
if (!int.TryParse(s, out tmp)) return false;
if (tmp <= 0) return false;
value = tmp;
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
int v;
if (Parser.TryParsePositive("12", out v))
Console.WriteLine("OK " + v);
else
Console.WriteLine("Invalid");
}
}
त्रुटि डिज़ाइन जाँचसूची
जाँचसूची:
- जहाँ संभव हो, अंतर्निर्मित प्रकार चुनें।
- अन्यथा, मानक कंस्ट्रक्टरों वाला छोटा CustomException बनाएँ।
- मूल कारण सुरक्षित रखने के लिए InnerException जोड़ें।
- अनपेक्षित मामलों के लिए अपवाद इस्तेमाल करें; अपेक्षित विफलताओं के लिए TryX इस्तेमाल करें।
कस्टम अपवाद डिज़ाइन
पुनरावृत्ति
पुनरावृत्ति: अंतर्निर्मित अपवादों को प्राथमिकता दें; अन्यथा मानक कंस्ट्रक्टरों वाला छोटा कस्टम प्रकार परिभाषित करें और कारण खोए बिना संदर्भ जोड़ने के लिए InnerException इस्तेमाल करें।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “Custom exceptions; error design” पाठ निःशुल्क है?
हाँ—“Custom exceptions; error design” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
“Custom exceptions; error design” में मैं क्या सीखूँगा?
छोटे custom exceptions बनाएँ, सही अंतर्निहित प्रकार चुनें (ArgumentException, InvalidOperationException) और InnerException के साथ संदर्भ जोड़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 2वाँ पाठ है।
“Custom exceptions; error design” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- try/catch/finally, throw new बनाम rethrow
- Custom exceptions; error design
- IDisposable, using कथन