如何在 C# 中正确比较两个复杂对象

问题描述 投票:0回答:1

我想找出检查两个对象是否相等的最佳方法。

我的情况:如果“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 方法)

c# .net entity-framework linq
1个回答
1
投票

好吧,对我来说,你似乎已经有了一个不错的基础/设置。我想到的唯一变化是

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 以来,我想知道您遇到了哪些问题。或者这只是一个“如何提高效率”的问题?

© www.soinside.com 2019 - 2024. All rights reserved.