सामान्य त्रुटियां
C# में सामान्य त्रुटियां उन समस्याओं को दर्शाती हैं जो कोडिंग के दौरान या प्रोग्राम के रनटाइम पर उत्पन्न होती हैं। इन त्रुटियों को समझना और उनका प्रभावी ढंग से प्रबंधन करना किसी भी अनुभवी C# डेवलपर के लिए अत्यंत महत्वपूर्ण है। सामान्य त्रुटियों में NullReferenceException, IndexOutOfRangeException, DivideByZeroException, InvalidCastException और FormatException प्रमुख हैं। ये त्रुटियां सीधे C# की बेसिक संकल्पना जैसे सिंटैक्स, डेटा स्ट्रक्चर, एल्गोरिदम और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) सिद्धांतों से जुड़ी होती हैं।
सामान्य त्रुटियों को समझने से डेवलपर्स को इनपुट वेलिडेशन, उचित एरर हैंडलिंग और डेटा स्ट्रक्चर की सीमा जाँच जैसी डिफेंसिव प्रोग्रामिंग तकनीक अपनाने में मदद मिलती है। इस अध्याय के माध्यम से पाठक सीखेंगे कि कैसे इन त्रुटियों की पहचान की जाए, उनका विश्लेषण कैसे करें और उन्हें C# के बेस्ट प्रैक्टिसेस के अनुसार हल करें। यह ज्ञान बड़े सॉफ्टवेयर सिस्टम और एंटरप्राइज एप्लिकेशन की स्थिरता और सुरक्षा के लिए महत्वपूर्ण है।
मूल उदाहरण
textusing System;
using System.Collections.Generic;
namespace SamanyaTrutiyanDemo
{
class Program
{
static void Main(string\[] args)
{
// NullReferenceException
List<string> items = null;
try
{
Console.WriteLine(items.Count); // रनटाइम त्रुटि
}
catch (NullReferenceException ex)
{
Console.WriteLine(\$"एरर पकड़ा गया: {ex.Message}");
}
// IndexOutOfRangeException
int[] numbers = {1, 2, 3};
try
{
Console.WriteLine(numbers[5]);
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine($"एरर पकड़ा गया: {ex.Message}");
}
}
}
}
उपरोक्त कोड में दो प्रमुख सामान्य त्रुटियों का प्रदर्शन किया गया है। NullReferenceException तब उत्पन्न होती है जब किसी नल ऑब्जेक्ट पर ऑपरेशन किया जाता है। इसे try-catch ब्लॉक के माध्यम से संभाला गया है ताकि प्रोग्राम क्रैश न हो। IndexOutOfRangeException तब होती है जब किसी एरे के मान्य इंडेक्स से बाहर पहुंचने का प्रयास किया जाता है। यह उदाहरण यह दर्शाता है कि एरे की सीमा की जाँच करना क्यों आवश्यक है। इन त्रुटियों का समझना C# में स्थिर और सुरक्षित कोड लिखने के लिए महत्वपूर्ण है।
व्यावहारिक उदाहरण
textusing System;
using System.Collections.Generic;
namespace AdvancedErrorHandling
{
class Calculator
{
public int Divide(int numerator, int denominator)
{
if (denominator == 0)
throw new DivideByZeroException("हिस्सेदार 0 नहीं हो सकता।");
return numerator / denominator;
}
}
class Program
{
static void Main(string[] args)
{
Calculator calc = new Calculator();
int result = 0;
try
{
result = calc.Divide(10, 0);
}
catch (DivideByZeroException ex)
{
Console.WriteLine($"एरर: {ex.Message}");
}
finally
{
Console.WriteLine($"अंतिम परिणाम: {result}");
}
}
}
}
Advanced C# Implementation
textusing System;
using System.Collections.Generic;
namespace EnterpriseErrorDemo
{
public interface IDataProcessor
{
void ProcessData(List<int> data);
}
public class DataProcessor : IDataProcessor
{
public void ProcessData(List<int> data)
{
if (data == null)
throw new ArgumentNullException(nameof(data), "सूची null नहीं हो सकती।");
for (int i = 0; i <= data.Count; i++)
{
try
{
Console.WriteLine(data[i]);
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine($"पकड़ी गई त्रुटि: {ex.Message}");
}
}
}
}
class Program
{
static void Main(string[] args)
{
IDataProcessor processor = new DataProcessor();
List<int> numbers = new List<int> {1, 2, 3};
try
{
processor.ProcessData(numbers);
}
catch (Exception ex)
{
Console.WriteLine($"अनपकड़ी त्रुटि: {ex.Message}");
}
}
}
}
C# में बेस्ट प्रैक्टिसेस में इनपुट और ऑब्जेक्ट वेलिडेशन, try-catch-finally का उपयोग, प्रभावी डेटा स्ट्रक्चर और एल्गोरिदम का चयन शामिल है। सामान्य गलतियाँ जैसे मेमोरी लीक, अपर्याप्त एरर हैंडलिंग और गैर-प्रभावी एल्गोरिदम से बचने के लिए Debugging टूल्स और StackTrace विश्लेषण का उपयोग किया जा सकता है। प्रदर्शन को ऑप्टिमाइज़ करने के लिए अनावश्यक एक्सेप्शन्स से बचें और कलेक्शन इनिशियलाइज़ेशन का सही उपयोग करें। सुरक्षा सुनिश्चित करने के लिए इनपुट वेलिडेशन और रिसोर्स मैनेजमेंट महत्वपूर्ण हैं।
📊 संपूर्ण संदर्भ
C# Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
NullReferenceException | Null ऑब्जेक्ट पर पहुंचने पर | throw new NullReferenceException(); | string s = null; Console.WriteLine(s.Length); | सामान्य रनटाइम त्रुटि |
IndexOutOfRangeException | एरे की सीमा से बाहर पहुंच | throw new IndexOutOfRangeException(); | int\[] arr = {1,2}; Console.WriteLine(arr\[3]); | सदैव सीमा जाँचें |
DivideByZeroException | 0 से विभाजन | throw new DivideByZeroException(); | int result = 5/0; | देनदार जाँच करें |
ArgumentNullException | Null आर्गुमेंट | throw new ArgumentNullException("arg"); | void Foo(string s){if(s==null)throw new ArgumentNullException("s");} | इनपुट वेलिडेशन करें |
InvalidCastException | गलत टाइप कन्वर्शन | (Type)newObject | object obj = "text"; int x = (int)obj; | कन्वर्शन पहले जाँचें |
FormatException | गलत फॉर्मेट | int.Parse("abc"); | int.Parse("abc"); | TryParse उपयोग करें |
OverflowException | अंक ओवरफ्लो | checked{int x=int.MaxValue+1;} | checked{int x=int.MaxValue+1;} | checked का उपयोग करें |
FileNotFoundException | फ़ाइल नहीं मिली | throw new FileNotFoundException("file.txt"); | File.ReadAllText("missing.txt"); | फ़ाइल अस्तित्व जाँचें |
StackOverflowException | अनंत रिकर्शन | void Foo(){Foo();} | Foo(); | रिकर्शन सीमित करें |
OutOfMemoryException | पर्याप्त मेमोरी नहीं | throw new OutOfMemoryException(); | var arr = new int\[int.MaxValue]; | मेमोरी मॉनिटर करें |
IOException | इनपुट/आउटपुट त्रुटि | throw new IOException("Error"); | File.ReadAllText("path"); | I/O हैंडल करें |
KeyNotFoundException | कुंजी नहीं मिली | dict\["key"]; | var dict = new Dictionary\<string,int>(); dict\["x"]; | ContainsKey जाँचें |
📊 Complete C# Properties Reference
Property | Values | Default | Description | C# Support |
---|---|---|---|---|
Message | string | "" | एरर विवरण | सभी संस्करण |
StackTrace | string | null | कॉल स्टैक विवरण | सभी संस्करण |
InnerException | Exception | null | एरर का मूल कारण | सभी संस्करण |
Source | string | null | एप्लिकेशन या ऑब्जेक्ट का नाम | सभी संस्करण |
HelpLink | string | null | डॉक्यूमेंटेशन लिंक | सभी संस्करण |
TargetSite | MethodBase | null | एरर उत्पन्न करने वाली विधि | सभी संस्करण |
HResult | int | 0 | एरर कोड | सभी संस्करण |
Data | IDictionary | Empty | कस्टम डेटा | सभी संस्करण |
ExceptionType | string | "" | एरर का प्रकार | सभी संस्करण |
IsTransient | bool | false | अस्थायी एरर है या नहीं | C# 8.0+ |
StackFrame | string | null | विशेष स्टैक फ्रेम | सभी संस्करण |
सामान्य त्रुटियों का ज्ञान डेवलपर्स को C# में स्थिर और सुरक्षित एप्लिकेशन बनाने में सक्षम बनाता है। इसके माध्यम से रनटाइम और कंपाइल टाइम समस्याओं की पहचान और समाधान में दक्षता आती है। अगला कदम असिंक्रोनस कोड में एरर हैंडलिंग, लॉगिंग सिस्टम्स का इंटिग्रेशन और प्रदर्शन ऑप्टिमाइज़ेशन तकनीक सीखना होना चाहिए। यह ज्ञान पेशेवर परियोजनाओं में रखरखाव, सुरक्षा और स्थिरता बढ़ाने में मदद करता है।
🧠 अपने ज्ञान की परीक्षा करें
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी