我想比较ParseObject上的两个关系,并确定它们是否相等,最好不要在关系上调用fetch()。我试过这样做:
MyParseObject.Get<ParseObject>("MyRelation") == MyOtherParseObject.Get<ParseObject>("MyRelation")
但它不起作用。我试过搜索谷歌,但没有找到我的问题的答案。是否可以在不提取数据的情况下比较这些关系?
非常感谢任何帮助。谢谢。
答案 0 :(得分:2)
我之前没有用过这个,但我还是想看一下文档和代码。
ObjectId
属性的注释说明了确定两个ParseObject
实例是否相等的标准:
Parse.ParseObject.ClassName和Parse.ParseObject.ObjectId的组合唯一标识应用程序中的对象。
因此,如果ClassName和ObjectId属性相等,则两个实例相等:
var my1 = MyParseObject.Get<ParseObject>("MyRelation");
var my2 = MyOtherParseObject.Get<ParseObject>("MyRelation");
return my1.ObjectId == my2.ObjectId && my1.ClassName == my2.ClassName;
但是,您不必手动执行此操作,而是找到了他们为您提供的方法:
return MyParseObject.Get<ParseObject>("MyRelation")
.HasSameId(MyOtherParseObject.Get<ParseObject>("MyRelation"));
来自HasSameId文档:
一个辅助函数,用于检查两个ParseObjects是否指向云中的同一个对象。
这是它在内部做的事情(还有其他的东西,但这是比较部分):
return other != null
&& object.Equals((object) this.ClassName, (object) other.ClassName)
&& object.Equals((object) this.ObjectId, (object) other.ObjectId);
有关使用==
符号的原始代码的说明...
如果ParseObject
类有overloaded the ==
operator并指定它应该比较ClassName和ObjectId,那么原始代码就可以了。
由于他们没有重载该运算符,==
运算符的默认行为是进行参考比较,MyParseObject.Get<ParseObject>
和MyOtherParseObject.Get<ParseObject>
在技术上是两个不同的对象,它返回false
。
答案 1 :(得分:0)
没关系,我找到了答案。以下声明工作正常。
MyParseObject.Get<ParseObject>("MyRelation").HasSameId(MyOtherParseObject.Get<ParseObject>("MyRelation"))