using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Crystal_Message { class Person { private string firstName =""; private string lastName= ""; private string phone=""; public Person(string firstName,string lastName,string phone) { this.FirstName = firstName; this.LastName = lastName; this.PhoneNumber = phone; } public string FirstName { get { return firstName; } private set { if (string.IsNullOrWhiteSpace(value)){ throw new ArgumentNullException("Must Include First Name"); } this.firstName = value; } } public string LastName { get { return lastName; } private set { if (string.IsNullOrWhiteSpace(value)){ throw new ArgumentNullException("Must Include Last Name"); } this.lastName = value; } } public string PhoneNumber { get { return phone; } private set { if (string.IsNullOrWhiteSpace(value)){ throw new ArgumentNullException("Must Include Phone Number"); } this.phone = value; } } public override string ToString() { return "First Name: " + this.FirstName + " " + " Last Name: " + this.LastName + " " + " Phone Number: " + this.PhoneNumber; } public override bool Equals(object obj) { if(obj == null) { return false; } Person testEquals = obj as Person; if((System.Object)testEquals == null) { return false; } return (this.firstName == testEquals.firstName) && (this.lastName == testEquals.lastName) && (this.phone == testEquals.phone); } /* public override int GetHashCode() { return } */ } }
我在MSDN之前遵循了这些指导原则.两个问题:
>我是否正确实施了equals方法?
>有人能告诉我如何正确地为我的班级实现GetHashCode吗? MSDN做x ^ y,但我不能为我做.
解决方法
好吧,为了不遇到任何问题,GetHashCode应该使用Equals使用的所有成员,反之亦然.
所以在你的情况下:
public override int GetHashCode() { return firstName.GetHashCode() ^ lastName.GetHashCode() ^ phone.GetHashCode(); }