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

时间:2015-02-26 13:59:46

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我在缓存中有搜索模型的对象(我从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)
 ...
    }

为什么会发生这种情况?

4 个答案:

答案 0 :(得分:1)

它返回false,因为您正在比较引用类型并且对象不是相同的引用(即使所有属性值可能相同)。

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

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

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

null

答案 1 :(得分:0)

您可以使用以下代码来比较两个对象

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

    object1.equals(object2);

答案 2 :(得分:0)

覆盖班级中的equals方法

答案 3 :(得分:0)

使用equals方法是正确的方法。虽然您应该覆盖类中的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)
    }
}

我希望这是有道理的。