ভিন্ন টাইপের লিস্টগুলো একসাথে রাখার জন্য List<List<object>> বা List<IList<object>> ব্যবহার করা যায়। যেহেতু সব টাইপ object-এভাবে ইনহেরিট করে, তাই এতে যেকোনো টাইপের লিস্ট যোগ করা যায়।
সিনট্যাক্স
List<List<object>> list = new List<List<object>>();
উদাহরণ
using System;
using System.Collections.Generic;
namespace MyApplication {
public class Program {
public static void Main() {
// বাহ্যিক লিস্ট: object টাইপের লিস্ট ধারণ করবে
List<List<object>> list = new List<List<object>>();
// প্রথম লিস্ট: ইন্টিজার
List<object> list1 = new List<object>();
list1.Add(101);
list1.Add(102);
list1.Add(103);
list.Add(list1);
// দ্বিতীয় লিস্ট: স্ট্রিং
List<object> list2 = new List<object>();
list2.Add("Test1");
list2.Add("Test2");
list2.Add("Test3");
list.Add(list2);
// তৃতীয় লিস্ট: মিক্সড টাইপ
List<object> list3 = new List<object>();
list3.Add(3.14);
list3.Add(true);
list3.Add(DateTime.Now);
list.Add(list3);
// প্রিন্ট করা
foreach (List<object> objectList in list) {
foreach (object obj in objectList) {
Console.WriteLine($"{obj.GetType().Name}: {obj}");
}
Console.WriteLine("---");
}
}
}
}
আউটপুট:
Int32: 101 Int32: 102 Int32: 103 --- String: Test1 String: Test2 String: Test3 --- Double: 3.14 Boolean: True DateTime: 1/15/2024 10:30:45 AM ---
বিকল্প পদ্ধতি: Tuple বা Custom Class (টাইপ সেফটি)
object ব্যবহার করলে বক্সিং/আনবক্সিং হয় এবং টাইপ সেফটি হারায়। ভালো পদ্ধতি:
১. Tuple (C# 7.0+)
var data = new List<(string Category, List<object> Items)> {
("Numbers", new List<object> { 1, 2, 3 }),
("Names", new List<object> { "A", "B" })
};
২. রেকর্ড/ক্লাস (সেরা প্র্যাকটিস)
public record DataCollection(string Category, List<object> Items);
var collections = new List<DataCollection> {
new DataCollection("Numbers", new List<object> { 1, 2, 3 }),
new DataCollection("Names", new List<object> { "A", "B" })
};
৩. জেনেরিক বেস ক্লাস/ইন্টারফেস
interface IDataList { }
class DataList<T> : IDataList {
public List<T> Items { get; } = new();
}
var lists = new List<IDataList> {
new DataList<int> { Items = { 1, 2, 3 } },
new DataList<string> { Items = { "A", "B" } }
};
সতর্কতা
List<object>-এ ভ্যালু টাইপ (int, double) অ্যাড করলে বক্সিং হয় (পারফরম্যান্স হ্রাস)- রানটাইমে টাইপ চেক দরকার (
is,as, প্যাটার্ন ম্যাচিং) - LINQ কোয়েরি লেখা কঠিন হয়
- সম্ভব হলে स्ट्रãngলি-টাইপড ডিজাইন ব্যবহার করুন