C#-এ Tuple<T1, T2> ক্লাস একটি ২-টাপল (2-tuple) বা যুগল (pair) উপস্থাপন করে। টাপল হলো একটি ডেটা স্ট্রাকচার যার একটি নির্দিষ্ট ক্রমে উপাদান থাকে। এটি অপরিবর্তনশীল (immutable) এবং রিড-অনলি।
বিশেষতাবলী
- Item1 - প্রথম উপাদান (T1 টাইপ)
- Item2 - দ্বিতীয় উপাদান (T2 টাইপ)
- নিরাপদে টাইপ-চেকড (compile-time type safety)
- হল्कা ওжет (lightweight) ডেটা কন্টেইনার
উদাহরণ ১: স্ট্রিং জোড়া (Pair of Strings)
using System;
public class Demo
{
public static void Main(string[] args)
{
// Tuple তৈরি
Tuple tuple = new Tuple("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
উদাহরণ ২: মিশ্র টাইপ (int এবং string)
using System;
public class Demo
{
public static void Main(string[] args)
{
// Tuple - প্রকার推斷 (type inference) কাজ করে
Tuple tuple = new Tuple(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
ফ্যাক্টরি মেথড: Tuple.Create() (সহজ সিনট্যাক্স)
// new Tuple(...) পরিবর্তে var tuple1 = Tuple.Create("jack", "steve"); // Tuple var tuple2 = Tuple.Create(20, "steve"); // Tuple var tuple3 = Tuple.Create(3.14, DateTime.Now); // Tuple // টাইপ স্পেসিফাই করাও যায় var tuple4 = Tuple.Create (100, "test");
ValueTuple (C# 7.0+) - আধুনিক বিকল্প
C# 7.0 থেকে ValueTuple (স্ট্রাকচার) উপলব্ধ, যা আরও দ্রুত এবং সুবিধাজনক:
সিনট্যাক্স তুলনা
// পুরানো Tuple (Class, Heap-allocated) TupleoldStyle = Tuple.Create(1, "one"); // নতুন ValueTuple (Struct, Stack-allocated) - C# 7.0+ (int, string) newStyle = (1, "one"); // Implicit ValueTuple explicitStyle = (1, "one"); // Explicit // নামকৃত উপাদান (Named elements) - শুধু ValueTuple-এ var named = (Id: 1, Name: "one"); Console.WriteLine(named.Id); // 1 Console.WriteLine(named.Name); // "one" // Deconstruction var (id, name) = named; Console.WriteLine($"{id}, {name}");
টাপল ব্যবহার করার ক্ষেত্র
- মাল্টিপল রিটার্ন ভ্যালু: মেথড থেকে একাধিক মান ফেরত দেওয়া
- ডেটা গ্রুপিং: ছোট ডেটা সেট একসাথে রাখা
- Dictionary Key: কম্পোজিট কি হিসেবে (Tuple ইমপ্লিমেন্ট করে IEquatable)
- LINQ প্রজেকশন:
Select(x => Tuple.Create(x.Id, x.Name))
উদাহরণ: মেথড থেকে দুই মান ফেরত দেওয়া
public (int Quotient, int Remainder) Divide(int dividend, int divisor)
{
return (dividend / divisor, dividend % divisor);
}
// ব্যবহার
var result = Divide(10, 3);
Console.WriteLine($"Quotient: {result.Quotient}, Remainder: {result.Remainder}");
// Output: Quotient: 3, Remainder: 1
সুপারিশ: নতুন কোডে ValueTuple (C# 7+) ব্যবহার করুন। পুরানো API বা লিগ্যাসি কোডবেসের জন্য Tuple<T1,T2> ব্যবহার করুন।