如何比较模型的两个对象?

How to compare two object of model?

我在缓存中有搜索模型的对象(我从 get-query 中保存了他)并且我通过 get-request 获得了其他相同模型的对象。

我想比较这些对象,但如果我不更改参数,无论如何我有 "false" 结果代码:

public class SearchO
{
  public  List<SellsLive> Data;
  public SellsLiveSearch Query;
}


    [HttpGet]
    public ActionResult Result(SellsLiveSearch ObjectModelFromQuery, string Ser)
    {           
                if (System.Web.HttpContext.Current.Cache[Ser] != null)
                        {SearchO ObjectModelFromCache = (SearchO)System.Web.HttpContext.Current.Cache[Ser];
                         if(ObjectModelFromCache.Query==ObjectModelFromQuery)
 ...
    }

为什么会发生这种情况?

你可以使用下面的代码来比较两个对象

    MyClass object1 = new MyClass("test");
    MyClass object2 = new MyClass("test"); 

    object1.equals(object2);

覆盖 class

中的 equals 方法

它return false 因为你正在比较引用类型并且对象不是同一个引用(即使通过所有 属性 值可能是相同的)。

ObjectModelFromQuery 是在您的操作方法中初始化的 SellsLiveSearch 的新实例。 ObjectModelFromCache.Query 是从会话中检索到的 SellsLiveSearch 的另一个实例。

如果 SellsLiveSearch 包含唯一标识对象的(比如)ID 属性,那么您可以使用 if(ObjectModelFromCache.Query.ID == ObjectModelFromQuery.ID)。否则,您需要覆盖 Equals()GetHashCode() 方法,以及 SellsLiveSearch==!= 运算符。有关详细示例,请参阅 Guidelines for Overloading Equals() and Operator == (C# Programming Guide)

旁注:通常,您不应将复杂对象传递给 GET 方法。除了这会创建丑陋的查询字符串之外,您还可以轻松地超出查询字符串字符限制并引发异常。此外,如果 SellsLiveSearch 的类型包含复杂对象或集合的属性,绑定将失败并且这些属性将为 null。而是传递标识对象的 ID 值。

public ActionResult Result(int ID, string Ser)
{
  ...
  if(ObjectModelFromCache.Query.ID == ID)
  {
    ....
  }
}

使用 equals 方法是正确的方法。尽管您应该覆盖 class 中的 Equal 方法并匹配等价的 Unique 值。

public class MyObject
{
    public int Id {get;set;}
    public overrides bool Equals(object obj)
    {
           if(obj==null)
               return false;
           return (MyObject)obj).Id.Equals(this.Id)
    }
}

我希望这是有道理的。