Как использовать метод equals для проверки полей в разных объектах, чтобы увидеть, равны ли они?
Как я могу использовать объекты equals() и метод gethashcode(), чтобы проверить значение поля объектов, чтобы убедиться, что оно истинно?
например номера заказов
У меня есть несколько различных объектов, которые я инициирую, и мне нужно запустить метод equals(), чтобы проверить их, чтобы увидеть, равны ли они.
2 ответа
Если объекты, на которые вы ссылаетесь, являются вашими собственными классами, вам необходимо переопределить методы Equals() и GetHashcode().
Пример:
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { FirstName = "Manny", Birthday = new DateTime(1970, 1, 4) };
Person p2 = new Person { FirstName = "Moe", Birthday = new DateTime(1970, 1, 4) };
Person p3 = new Person { FirstName = "Manny", Birthday = new DateTime(1970, 1, 4) };
Console.WriteLine("p1 = p2? {0}", p1.Equals(p2));
Console.WriteLine("p2 = p3? {0}", p2.Equals(p3));
Console.WriteLine("p1 = p3? {0}", p1.Equals(p3));
Console.WriteLine("p1 Hash = {0}", p1.GetHashCode());
Console.WriteLine("p2 Hash = {0}", p2.GetHashCode());
Console.WriteLine("p3 Hash = {0}", p3.GetHashCode());
}
}
class Person
{
public string FirstName { get; set; }
public DateTime Birthday { get; set; }
// You define what an equaled object is.
// In this example, we will say a Person is equal if they have the same
// FirstName and Birthday
public override bool Equals(object obj)
{
bool equals = false;
if (obj is Person)
{
Person p = (Person)obj;
if (p.FirstName == this.FirstName && p.Birthday == this.Birthday)
equals = true;
}
return equals;
}
// You define what the hashcode of the object is.
// In this example, we will define the hashcode as the
// concatenation of the FirstName and Birthday
public override int GetHashCode()
{
return string.Format("{0}-{1}", this.FirstName, this.Birthday).GetHashCode();
}
}
Выход программы будет...
p1 = p2? False
p2 = p3? False
p1 = p3? True
p1 Hash = 1727998619
p2 Hash = 1625318294
p3 Hash = 1727998619
Переопределить оба Equals()
а также GetHasCode()
с вашей собственной реализацией, и тогда вам не нужно полагаться на реализацию по умолчанию в Object
типа, и вы будете иметь полный контроль над тем, что происходит.