Tôi đang cố gắng hiểu những gì object.GetHashCode()
được sử dụng cho. Tôi đọc rằng nó được sử dụng bởi các bộ sưu tập để nhận dạng duy nhất các khóa. Nhưng tôi muốn thử nghiệm điều này và kết quả không phải là những gì tôi mong đợi.Tại sao GetHashCode() lại quan trọng?
struct Animal
{
public string Name { get; set; }
public int Age { get; set; }
public Animal(string name, int age) : this()
{
Name = name;
Age = age;
}
public override int GetHashCode()
{
return Age.GetHashCode();
}
}
object doggy = new Animal("Dog", 25);
object cat = new Animal("Cat", 25);
Hashtable table = new Hashtable();
table.Add(doggy, "Dog");
table.Add(cat, "Cat");
Console.WriteLine("{0}", table[cat]);
Console.WriteLine("{0}", table[doggy]);
tôi dự kiến sẽ có "Cát" sẽ ghi đè lên "Chó" hoặc một số loại lỗi nói với tôi rằng "chìa khóa đã tồn tại" nhưng sản lượng là
"Cat" "Dog"
btw - nó không liên quan đến câu hỏi, nhưng 'struct' là một lựa chọn rất nghèo cho kịch bản này. Nếu nghi ngờ, hãy sử dụng 'lớp'. Nếu không nghi ngờ, có lẽ vẫn dùng 'class'. Đó là * cực kỳ * hiếm (có hiệu lực) khai báo một 'struct' trong C#. –
Vâng tôi đồng ý, thực sự thử nghiệm ban đầu với lớp, nhưng tôi đã cố gắng thay thế cấu trúc để xem nó có tạo sự khác biệt không :) –