C# में Tuple<T1, T2> क्लास एक 2-टपल को दर्शाता है, जिसे पेयर (Pair) भी कहा जाता है। एक टपल एक डेटा संरचना है जिसमें तत्वों का क्रम होता है।
उदाहरण 1: स्ट्रिंग पेयर
using System;
public class Demo
{
public static void Main(string[] args)
{
Tuple<string, string> tuple = new Tuple<string, string>("jack", "steve");
Console.WriteLine("Value = " + tuple.Item1);
if (tuple.Item1 == "jack")
{
Console.WriteLine("Exists: Tuple Value = " + tuple.Item1);
}
if (tuple.Item2 == "david")
{
Console.WriteLine("Exists: Tuple Value = " + tuple.Item2);
}
}
}
आउटपुट
Value = jack Exists: Tuple Value = jack
उदाहरण 2: मिश्रित प्रकार (int, string)
using System;
public class Demo
{
public static void Main(string[] args)
{
// नोट: मूल कोड में Tuple बिना जेनेरिक पैरामीटर के दिखाया गया है (कंपाइल त्रुटि)
// सही सिंटैक्स:
Tuple<int, string> tuple = new Tuple<int, string>(20, "steve");
Console.WriteLine("Value = " + tuple.Item1);
if (tuple.Item1 == 20)
{
Console.WriteLine("Exists: Tuple Value = " + tuple.Item1);
}
if (tuple.Item2 == "david")
{
Console.WriteLine("Exists: Tuple Value = " + tuple.Item2);
}
}
}
आउटपुट
Value = 20 Exists: Tuple Value = 20
आधुनिक C# 7.0+: ValueTuple (टपल लिटरल्स)
.NET 4.7+ / C# 7.0 से, ValueTuple संरचना और टपल लिटरल सिंटैक्स उपलब्ध है जो अधिक सुविधाजनक है:
सिंटैक्स तुलना
// पुराना तरीका (क्लास-आधारित, रेफरेंस प्रकार) Tuple<int, string> oldStyle = new Tuple<int, string>(1, "one"); Console.WriteLine(oldStyle.Item1); // 1 Console.WriteLine(oldStyle.Item2); // "one" // नया तरीका (स्ट्रक्चर-आधारित, मान प्रकार) - C# 7.0+ (int, string) newStyle = (1, "one"); // या नामित सदस्यों के साथ: (int Number, string Text) named = (1, "one"); Console.WriteLine(newStyle.Item1); // 1 Console.WriteLine(named.Number); // 1 (नामित एक्सेस!) Console.WriteLine(named.Text); // "one"
ValueTuple के लाभ
- नामित सदस्य -
Item1/Item2के बजाय सार्थक नाम - मान प्रकार - स्टैक आवंटन, कोई GC दबाव नहीं
- डीऑर्डरिंग -
var (a, b) = tuple; - बेहतर प्रदर्शन - कोई हीप आवंटन नहीं
- समानता - संरचनात्मक तुलना स्वचालित
व्यावहारिक उदाहरण: मल्टीपल रिटर्न मान
// पुराना तरीका
public Tuple<int, int> DivideOld(int dividend, int divisor)
{
return new Tuple<int, int>(dividend / divisor, dividend % divisor);
}
// नया तरीका (C# 7.0+)
public (int Quotient, int Remainder) DivideNew(int dividend, int divisor)
{
return (dividend / divisor, dividend % divisor);
}
// उपयोग
var (q, r) = DivideNew(10, 3);
Console.WriteLine($"भागफल: {q}, शेष: {r}"); // भागफल: 3, शेष: 1
मुख्य बिंदु
- Tuple<T1,T2> एक रेफरेंस प्रकार (क्लास) है - .NET 2.0+ से उपलब्ध
- ValueTuple<T1,T2> एक मान प्रकार (स्ट्रक्चर) है - .NET 4.7+ / C# 7.0+ से उपलब्ध
- नए कोड के लिए ValueTuple (टपल लिटरल्स) का उपयोग करने की अनुशंसा
- टपल अपरिवर्तनीय (immutable) होते हैं - निर्माण के बाद मान नहीं बदल सकते
- अधिकतम 8 तत्वों तक सपोर्ट (Tuple<T1...T8>), ValueTuple में कोई सीमा नहीं