C# 7.0 ने out पैरामीटर्स को अधिक सुविधाजनक बनाया: अब आउट वेरिएबल्स को मेथड कॉल के आर्गुमेंट लिस्ट में ही इंलाइन डिक्लेयर किया जा सकता है।
पुराना सिंटैक्स (C# 7.0 से पहले)
class Program {
public static void AddMultiplyValues(int a, int b, out int c, out int d) {
c = a + b;
d = a * b;
}
public static void Main() {
int c; // अलग डिक्लेरेशन आवश्यक
int d;
AddMultiplyValues(5, 10, out c, out d);
System.Console.WriteLine(c); // 15
System.Console.WriteLine(d); // 50
Console.ReadLine();
}
}
नया सिंटैक्स (C# 7.0+)
class Program {
public static void AddMultiplyValues(int a, int b, out int c, out int d) {
c = a + b;
d = a * b;
}
public static void Main() {
// इंलाइन डिक्लेरेशन - मेथड कॉल में ही
AddMultiplyValues(5, 10, out int c, out int d);
System.Console.WriteLine(c); // 15
System.Console.WriteLine(d); // 50
Console.ReadLine();
}
}
आउटपुट (दोनों के लिए समान)
15
50
लाभ
- कोड पठनीयता: डिक्लेरेशन और उपयोग एक साथ
- प्रारंभिक मान असाइन करने की आवश्यकता नहीं: कंपाइलर सुनिश्चित करता है कि मेथड असाइन करेगा
- स्कोप नियंत्रण: वेरिएबल का स्कोप स्वाभाविक रूप से सीमित
- var समर्थन: टाइप इन्फरेंस के साथ
out varउपयोग कर सकते हैं
Var के साथ उपयोग
// टाइप इन्फरेंस
AddMultiplyValues(5, 10, out var c, out var d);
// मिश्रित: कुछ इंलाइन, कुछ पहले से डिक्लेयर्ड
int c;
AddMultiplyValues(5, 10, out c, out var d);
TryParse पैटर्न में सुधार
// पुराना तरीका
int number;
bool success = int.TryParse(input, out number);
if (success) { /* use number */ }
// नया तरीका - अधिक संक्षिप्त
if (int.TryParse(input, out int number)) {
// number यहाँ स्कोप में है
Console.WriteLine($"Parsed: {number}");
}
// number यहाँ स्कोप में नहीं (यदि if ब्लॉक के बाहर)
नियम और प्रतिबंध
- इंलाइन डिक्लेयर्ड आउट वेरिएबल्स का स्कोप एनक्लोजिंग ब्लॉक होता है
outपैरामीटर को मेथड लौटने से पहले असाइन किया जाना चाहिएrefके साथ काम नहीं करता (केवलoutके लिए)- एक्सटेंशन मेथड्स पर लागू नहीं होता
C# 7.0 से पहले के साथ तुलना
// C# 6.0 - दो स्टेटमेंट्स
int x;
int.TryParse("123", out x);
// C# 7.0 - एक स्टेटमेंट
int.TryParse("123", out int x);