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

Lấy hoặc đặt giá trị liên kết khóa trong Hashtable C#

Giới thiệu

Hashtable sử dụng indexer [key] để lấy hoặc đặt giá trị liên kết với khóa. Nếu khóa không tồn tại khi get, trả về null; khi set, sẽ thêm mới hoặc cập nhật.

Ví dụ 1: Lấy giá trị theo khóa

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Hashtable hash = new Hashtable();
        hash.Add("1", "AB");
        hash.Add("2", "BC");
        hash.Add("3", "DE");
        hash.Add("4", "EF");
        hash.Add("5", "GH");
        hash.Add("6", "IJ");
        hash.Add("7", "KL");
        hash.Add("8", "MN");
        hash.Add("9", "OP");
        hash.Add("10", "QR");
        
        Console.WriteLine("Value at key 3 = " + hash["3"]);
    }
}

Kết quả

Value at key 3 = DE

Ví dụ 2: Cập nhật giá trị theo khóa

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Hashtable hash = new Hashtable();
        hash.Add("1", "AB");
        hash.Add("2", "BC");
        hash.Add("3", "DE");
        hash.Add("4", "EF");
        hash.Add("5", "GH");
        hash.Add("6", "IJ");
        hash.Add("7", "KL");
        hash.Add("8", "MN");
        hash.Add("9", "OP");
        hash.Add("10", "QR");
        
        Console.WriteLine("Value at key 3 = " + hash["3"]);
        hash["3"] = "UV";
        Console.WriteLine("Value at key 3 (UPDATED) = " + hash["3"]);
    }
}

Kết quả

Value at key 3 = DE
Value at key 3 (UPDATED) = UV

Lưu ý khi sử dụng Indexer

  • Get: Trả về null nếu khóa không tồn tại (không ném ngoại lệ)
  • Set: Tự động thêm mới nếu khóa chưa có, cập nhật nếu đã có
  • Khóa không được null
  • Giá trị có thể là null
  • Không an toàn luồng (thread-safe) mặc định - dùng Hashtable.Synchronized() nếu cần

So sánh với Dictionary<TKey, TValue>

Đặc điểm Hashtable Dictionary<TKey, TValue>
Kiểu khóa/giá trị object TKey, TValue (generic)
Hiệu suất Boxing/unboxing Không boxing (kiểu giá trị)
Khóa không tồn tại (get) Trả về null Ném KeyNotFoundException
Thread-safe Có wrapper Synchronized Không (dùng ConcurrentDictionary)