Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kiểm tra Hashtable có chỉ đọc trong C#

Giới thiệu

Để kiểm tra xem Hashtable có được đánh dấu là chỉ đọc (read-only) hay không, ta sử dụng thuộc tính IsReadOnly. Hashtable mặc định không phải là chỉ đọc, nhưng có thể tạo phiên bản chỉ đọc bằng phương thức Hashtable.Synchronized() hoặc wrapper.

Ví dụ 1

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Hashtable hash = new Hashtable();
        hash.Add("One", "Katie");
        hash.Add("Two", "John");
        hash.Add("Three", "Barry");
        hash.Add("Four", "");
        hash.Add("Five", "Harry");
        hash.Add("Six", "F");
        hash.Add("Seven", "Tom");
        hash.Add("Eight", "Andy");
        hash.Add("Nine", "I");
        hash.Add("Ten", "Tim");

        Console.WriteLine("Các cặp khóa/giá trị trong Hashtable...");
        foreach (DictionaryEntry entry in hash)
        {
            Console.WriteLine("{0} và {1}", entry.Key, entry.Value);
        }

        Console.WriteLine("Hashtable có kích thước cố định? = " + hash.IsFixedSize);
        Console.WriteLine("Hashtable chỉ đọc? = " + hash.IsReadOnly);
    }
}

Kết quả

Các cặp khóa/giá trị trong Hashtable...
One và Katie
Ten và Tim
Five và Harry
Three và Barry
Seven và Tom
Two và John
Four và 
Eight và Andy
Nine và I
Six và F
Hashtable có kích thước cố định? = False
Hashtable chỉ đọc? = False

Ví dụ 2

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Hashtable hash = new Hashtable();
        hash.Add("1", "A");
        hash.Add("2", "B");
        hash.Add("3", "C");
        hash.Add("4", "D");
        hash.Add("5", "E");
        hash.Add("6", "F");
        hash.Add("7", "G");
        hash.Add("8", "H");
        hash.Add("9", "I");
        hash.Add("10", "J");

        Console.WriteLine("Các cặp khóa/giá trị trong Hashtable...");
        foreach (DictionaryEntry entry in hash)
        {
            Console.WriteLine("{0} và {1}", entry.Key, entry.Value);
        }

        Console.WriteLine("Hashtable có kích thước cố định? = " + hash.IsFixedSize);
        Console.WriteLine("Hashtable chỉ đọc? = " + hash.IsReadOnly);
    }
}

Kết quả

Các cặp khóa/giá trị trong Hashtable...
10 và J
1 và A
2 và B
3 và C
4 và D
5 và E
6 và F
7 và G
8 và H
9 và I
Hashtable có kích thước cố định? = False
Hashtable chỉ đọc? = False

Tạo Hashtable chỉ đọc

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Hashtable hash = new Hashtable();
        hash.Add("A", "1");
        hash.Add("B", "2");

        // Tạo wrapper chỉ đọc
        Hashtable readOnlyHash = Hashtable.Synchronized(hash);
        
        Console.WriteLine("Hashtable gốc chỉ đọc? = " + hash.IsReadOnly);
        Console.WriteLine("Wrapper chỉ đọc? = " + readOnlyHash.IsReadOnly);
        
        // Thử thêm vào wrapper sẽ ném ngoại lệ NotSupportedException
        try
        {
            readOnlyHash.Add("C", "3");
        }
        catch (NotSupportedException ex)
        {
            Console.WriteLine("Lỗi: " + ex.Message);
        }
    }
}

Lưu ý quan trọng

  • Hashtable mặc định IsReadOnly = false và IsFixedSize = false.
  • Thuộc tính IsReadOnly chỉ trả về true cho các wrapper chỉ đọc được tạo bằng Hashtable.Synchronized() hoặc các collection wrapper khác.
  • Trong .NET hiện đại, khuyến nghị sử dụng Dictionary<TKey, TValue> và IReadOnlyDictionary<TKey, TValue> cho tính chỉ đọc.