2015-12-21 43 views
1

這是parse.com Documentation說,關於子類ParseObjects:C#/ Unity parse.com子類化buggy?

[ParseClassName("Armor")] 
public class Armor : ParseObject 
{ 
    [ParseFieldName("displayName")] 
    public string DisplayName 
    { 
    get { return GetProperty<string>(); } 
    set { SetProperty<string>(value); } 
    } 
} 

問題#1:這個例子是錯誤的;這兩種方法都需要一個propertyName PARAM,所以這是我做的,而不是

[ParseFieldName("seed")] 
public int Seed { 
    get { return GetProperty<int>("seed"); } 
    set { SetProperty<int>(value, "seed"); } 
} 

問題#2:這樣做,我得到以下異常:

ArgumentNullException: Argument cannot be null. 
Parameter name: key 
System.Collections.Generic.Dictionary`2[System.String,System.Object].ContainsKey (System.String key) (at /Users/builduser/buildslave/mono-runtime-and- classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:458) 
Parse.ParseObject.ContainsKey (System.String key) 
Parse.ParseObject.TryGetValue[Int32] (System.String key, System.Int32& result) 
Parse.ParseObject.GetProperty[Int32] (Int32 defaultValue, System.String propertyName) 
Parse.ParseObject.GetProperty[Int32] (System.String propertyName) 
Example.get_Seed() (at Assets/Commons/Parse/Example.cs:10) 

我沒有解析源代碼,所以我不能通過調試,但這看起來像一個bug(在一個非常基本的API)。所以我想知道;我做錯了什麼?我注意到,無論出於何種原因,還有一個Get<T>(),但是也沒有運氣。

更新:我使用Parse.Unity 1.6.2.0

+0

的例子是沒有錯,屬性名稱字段的默認值爲null,該方法使用「CallerMemberNameAttribute」來找出您嘗試檢索的屬性的名稱。但請注意,如果您傳入屬性名稱,則不應該中斷,但應該使用相同的大小寫('Seed',而不是'seed')。 –

+0

所以,如果它沒有錯,爲什麼'方法沒有重載'GetProperty'需要0參數'編譯錯誤拋出我?爲什麼我應該使用相同的情況? C#名稱和解析名稱不必匹配,否則註釋將毫無用處,示例也完全一樣。 –

+0

也許你有一個不支持可選參數的舊版Mono。 –

回答

0

看起來propertyName的字段是大小寫敏感的,它必須匹配的屬性的名稱:

[ParseFieldName("Seed")] 
public int Seed { 
    get { return GetProperty<int>("Seed"); } 
    set { SetProperty<int>(value, "Seed"); } 
} 
// Seed is capitalized in all occurrences above