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 = falsevàIsFixedSize = false. - Thuộc tính
IsReadOnlychỉ trả vềtruecho các wrapper chỉ đọc được tạo bằngHashtable.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.