2014-12-19 50 views
2

我想比较ParseObject上的两个关系,并确定它们是否相等,最好不要在关系上调用fetch()。我试过这样做:在Parse.com中比较关系c#

MyParseObject.Get<ParseObject>("MyRelation") == MyOtherParseObject.Get<ParseObject>("MyRelation") 

但它不起作用。我试图搜索谷歌,但还没有找到我的问题的答案。是否有可能比较这些关系,而不提取他们的数据?

任何帮助将不胜感激。谢谢。

回答

2

我以前没有用过这个,但是我想我会看看文档和代码。

用于确定是否2个ParseObject实例在ObjectId属性状态的标准的注释被视为相等:

一个Parse.ParseObject.ClassName和Parse.ParseObject.ObjectId的组合唯一地标识一个对象你的申请。

因此,如果类名和的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

0

没关系,我找到了我的答案。下面的声明工作正常。

MyParseObject.Get<ParseObject>("MyRelation").HasSameId(MyOtherParseObject.Get<ParseObject>("MyRelation"))