我想比较 ParseObject 上的两个关系,并确定它们是否相等,最好不要在关系上调用 fetch() 。我尝试过这样做:
MyParseObject.Get<ParseObject>("MyRelation") == MyOtherParseObject.Get<ParseObject>("MyRelation")
但是这不起作用。我尝试在谷歌上搜索,但没有找到我的问题的答案。是否可以在不获取数据的情况下比较这些关系?
任何帮助将不胜感激。谢谢。
最佳答案
我以前没有使用过这个,但我想我还是应该看看文档和代码。
对ObjectId
的评论属性规定了确定两个 ParseObject
是否存在的标准实例被认为是相等的:
The combination of a Parse.ParseObject.ClassName and an Parse.ParseObject.ObjectId uniquely identifies an object in your application.
因此,如果 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文档:
A helper function for checking whether two ParseObjects point to the same object in the cloud.
这是它内部所做的事情(还有其他东西,但这是比较部分):
return other != null
&& object.Equals((object) this.ClassName, (object) other.ClassName)
&& object.Equals((object) this.ObjectId, (object) other.ObjectId);
关于使用 ==
的原始代码的注释签名...
如果ParseObject
类(class)有overloaded the ==
operator并指定它应该比较 ClassName 和 ObjectId,那么您的原始代码就可以工作。
因为他们没有重载该运算符,并且 ==
的默认行为运算符是做引用比较,MyParseObject.Get<ParseObject>
和MyOtherParseObject.Get<ParseObject>
从技术上讲是两个不同的对象,它返回 false
.
关于c# - 比较 Parse.com c# 中的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27559016/