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

C#-তে ListDictionary শুধুমাত্র পঠনযোগ্য (Read-Only) কিনা যাচাই করা

ListDictionary ক্লাসের IsReadOnly প্রোপার্টি ব্যবহার করে ডিকশনারি শুধুমাত্র পঠনযোগ্য কিনা তা জানা যায়। এই প্রোপার্টি সবসময় false রিটার্ন করে কারণ ListDictionary ডিফল্টভাবে মডিফাইযোগ্য (read-write)।

উদাহরণ ১: দুটি ListDictionary-র রিড-অনলি স্ট্যাটাস যাচাই

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
    public static void Main() {
        ListDictionary dict1 = new ListDictionary();
        dict1.Add("A", "বই");
        dict1.Add("B", "ইলেকট্রনিক্স");
        dict1.Add("C", "স্মার্ট ওয়েয়ারেবল");
        dict1.Add("D", "পেট সাপ্লাই");
        dict1.Add("E", "পোশাক");
        dict1.Add("F", "ফুটওয়েয়ার");

        Console.WriteLine("ListDictionary1 উপাদানসমূহ...");
        foreach (DictionaryEntry d in dict1) {
            Console.WriteLine(d.Key + " " + d.Value);
        }

        Console.WriteLine("নির্দিষ্ট আকার কিনা? = " + dict1.IsFixedSize);
        Console.WriteLine("শুধুমাত্র পঠনযোগ্য কিনা? = " + dict1.IsReadOnly);
        Console.WriteLine("সিঙ্ক্রোনাইজড কিনা? = " + dict1.IsSynchronized);
        Console.WriteLine("কী 'M' আছে কিনা? = " + dict1.Contains("M"));

        ListDictionary dict2 = new ListDictionary();
        dict2.Add("1", "এক");
        dict2.Add("2", "দুই");
        dict2.Add("3", "তিন");
        dict2.Add("4", "চার");
        dict2.Add("5", "পাঁচ");
        dict2.Add("6", "ছয়");

        Console.WriteLine("\nListDictionary2 কী-ভ্যালু জোড়া...");
        IDictionaryEnumerator demoEnum = dict2.GetEnumerator();
        while (demoEnum.MoveNext()) {
            Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
        }

        Console.WriteLine("নির্দিষ্ট আকার কিনা? = " + dict2.IsFixedSize);
        Console.WriteLine("শুধুমাত্র পঠনযোগ্য কিনা? = " + dict2.IsReadOnly);
        Console.WriteLine("সিঙ্ক্রোনাইজড কিনা? = " + dict2.IsSynchronized);
        Console.WriteLine("কী '5' আছে কিনা? = " + dict2.Contains("5"));
    }
}

আউটপুট

ListDictionary1 উপাদানসমূহ...
A বই
B ইলেকট্রনিক্স
C স্মার্ট ওয়েয়ারেবল
D পেট সাপ্লাই
E পোশাক
F ফুটওয়েয়ার
নির্দিষ্ট আকার কিনা? = False
শুধুমাত্র পঠনযোগ্য কিনা? = False
সিঙ্ক্রোনাইজড কিনা? = False
কী 'M' আছে কিনা? = False

ListDictionary2 কী-ভ্যালু জোড়া...
Key = 1, Value = এক
Key = 2, Value = দুই
Key = 3, Value = তিন
Key = 4, Value = চার
Key = 5, Value = পাঁচ
Key = 6, Value = ছয়
নির্দিষ্ট আকার কিনা? = False
শুধুমাত্র পঠনযোগ্য কিনা? = False
সিঙ্ক্রোনাইজড কিনা? = False
কী '5' আছে কিনা? = True

উদাহরণ ২: আরেকটি ListDictionary-র প্রোপার্টি যাচাই

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
    public static void Main() {
        ListDictionary dict = new ListDictionary();
        dict.Add("1", "SUV");
        dict.Add("2", "সেডান");
        dict.Add("3", "ইউটিলিটি ভেহিকেল");
        dict.Add("4", "কম্প্যাক্ট কার");
        dict.Add("5", "SUV");
        dict.Add("6", "সেডান");
        dict.Add("7", "ইউটিলিটি ভেহিকেল");
        dict.Add("8", "কম্প্যাক্ট কার");
        dict.Add("9", "ক্রসওভার");
        dict.Add("10", "ইলেকট্রিক কার");

        Console.WriteLine("ListDictionary উপাদানসমূহ...");
        foreach (DictionaryEntry d in dict) {
            Console.WriteLine(d.Key + " " + d.Value);
        }

        Console.WriteLine("\nনির্দিষ্ট আকার কিনা? = " + dict.IsFixedSize);
        Console.WriteLine("শুধুমাত্র পঠনযোগ্য কিনা? = " + dict.IsReadOnly);
        Console.WriteLine("সিঙ্ক্রোনাইজড কিনা? = " + dict.IsSynchronized);
        Console.WriteLine("কী 'K' আছে কিনা? = " + dict.Contains("K"));
        Console.WriteLine("কী '9' আছে কিনা? = " + dict.Contains("9"));
    }
}

আউটপুট

ListDictionary উপাদানসমূহ...
1 SUV
2 সেডান
3 ইউটিলিটি ভেহিকেল
4 কম্প্যাক্ট কার
5 SUV
6 সেডান
7 ইউটিলিটি ভেহিকেল
8 কম্প্যাক্ট কার
9 ক্রসওভার
10 ইলেকট্রিক কার

নির্দিষ্ট আকার কিনা? = False
শুধুমাত্র পঠনযোগ্য কিনা? = False
সিঙ্ক্রোনাইজড কিনা? = False
কী 'K' আছে কিনা? = False
কী '9' আছে কিনা? = True

ListDictionary-র তিনটি মূল প্রোপার্টি সারসংক্ষেপ

প্রোপার্টিরিটার্নঅর্থ
IsReadOnlyfalseডিকশনারি মডিফাই করা যায় (Add/Remove/Clear)
IsFixedSizefalseআকার পরিবর্তন করা যায়
IsSynchronizedfalseথ্রেড-সেফ নয়

রিড-অনলি ডিকশনারি তৈরি করার পদ্ধতি

// পদ্ধতি ১: লিগ্যাসি - ReadOnly wrapper (নন-জেনেরিক)
IDictionary readOnlyDict = new ListDictionary();
// ... আইটেম যোগ করুন ...
// ListDictionary-র জন্য বিল্ট-ইন ReadOnly মেথড নেই
// Hashtable-এ আছে: Hashtable.Synchronized() / ReadOnly()

// পদ্ধতি ২: আধুনিক - IReadOnlyDictionary (সুপারিশকৃত)
using System.Collections.Generic;
using System.Collections.ObjectModel;

var dict = new Dictionary<string, string>();
dict.Add("A", "বই");
dict.Add("B", "ইলেকট্রনিক্স");

// রিড-অনলি র‍্যাপার
IReadOnlyDictionary<string, string> readOnly = new ReadOnlyDictionary<string, string>(dict);
// অথবা .NET 6+ এ:
IReadOnlyDictionary<string, string> readOnly2 = dict.AsReadOnly();  // Extension method

// পদ্ধতি ৩: ImmutableDictionary (System.Collections.Immutable প্যাকেজ)
using System.Collections.Immutable;
var immutableDict = dict.ToImmutableDictionary();  // সম্পূর্ণ ইমিউটেবল

সুপারিশ

  • ListDictionary লিগ্যাসি নন-জেনেরিক ক্লাস।
  • নতুন কোডে Dictionary<TKey, TValue> + ReadOnlyDictionary<TKey, TValue> বা ImmutableDictionary<TKey, TValue> ব্যবহার করুন।
  • IsReadOnly প্রোপার্টি শুধু ইনফরমেশনাল - এটি সবসময় false রিটার্ন করে।
  1. C#-এ Collection-এ উপাদান রয়েছে কিনা তা যাচাই করুন

  2. C#-এ অ্যারে রিড-অনলি কিনা তা যাচাই করুন

  3. C#-এ রিড-অনলি প্রপার্টি যোগ করা (Add Read-Only Property)

  4. C#-এ লিস্ট খালি কিনা চেক করা