我想找出检查两个对象是否相等的最佳方法。
我的情况:如果“Street”名称等于“StandardStreet”名称或“StandardStreet”同义词名称之一,则返回 true;
public class BaseStreet
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
public class Street : BaseStreet
{
}
public class SynonymStreet : BaseStreet
{
public int StandardStreetId { get; set; }
[ForeignKey("StandardStreetId")]
public StandardStreet StandardStreet { get; set; }
}
public class StandardStreet : BaseStreet
{
public HashSet<SynonymStreet> SynonymStreets { get; set; }
//I think the logic will be here
public override bool Equals(object? obj)
{
if (obj == null || obj.GetType() != typeof(BaseStreet))
{
return false;
}
else
{
Street street = (Street)obj;
return street.CityId == CityId && (Name.Equals(street.Name) || SynonymStreets.Select(x => x.Name).Contains(street.Name));
}
}
}
我想根据上面的描述检查 Street(按名称)是否等于 StandardStreet? 最好使用 Contains 方法(据我所知它也使用 Equals 方法)
好吧,对我来说,你似乎已经有了一个不错的基础/设置。我想到的唯一变化是
public override bool Equals(object? obj)
{
if(obj is not null && obj is BaseStreet baStr)
{
return baStr.CityId == CityId && (Name == baStr.Name || SynonymStreets.Any(s => s.Name == baStr.Name));
}else
{
return false;
}
}
尽管自从您发布此 ID 以来,我想知道您遇到了哪些问题。或者这只是一个“如何提高效率”的问题?