কম্পিউটার টিউটোরিয়াল

C#-এ একক জেনেরিক লিস্টে ভিন্ন টাইপের একাধিক লিস্ট সংরক্ষণ

ভিন্ন টাইপের লিস্টগুলো একসাথে রাখার জন্য 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লি-টাইপড ডিজাইন ব্যবহার করুন
  1. জাভাস্ক্রিপ্টে প্রিমিটিভ/অবজেক্ট টাইপ ফাংশনে পাস করা

  2. HTML লিস্টের প্রকারভেদ

  3. পাওয়ারপয়েন্টে এক স্লাইডে লং লিস্ট দেখানোর পদ্ধতি

  4. পাইথনে লিস্টের লিস্ট থেকে ফ্ল্যাট লিস্ট বানानेের পদ্ধতি