我在缓存中有搜索模型的对象(我从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)
...
}
为什么会发生这种情况?
答案 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)
}
}
我希望这是有道理的。