2012-05-10 16 views
0

考慮下面的代碼:在C#.NET定義的getter,宣稱身體不接受

[DataContract] 
class QObject { 
    public QObject() { } 
    [DataMember(Name = "objectindex")] 
    public int ObjectIndex { get; set; } 
    [DataMember(Name = "datapoint")] 
    public int DataPoint { get; set; } 
    [DataMember(Name = "type")] 
    public string Type { get; set; } 
    [DataMember(Name = "data")] 
    public int[] Data { get; set; } 
    [DataMember(Name = "parameters")] 
    public string __Parameters { 
     get { 
      return this.__Parameters; 
     } 
     set { 
      Parameters = new Dictionary<string,string>(); 
      Parameters.Add("key", "value"); 
     } 
    } 
    public Dictionary<string, string> Parameters; 
} 

其中由我看起來很好,但是當我想要編譯,它就會出現以下錯誤:

「 QuartzService.NET.QObject .__ Parameters.get」必須聲明主體,因爲它不標記爲抽象,EXTERN或部分

奇怪的是,該得到聲明的身體。那麼,如何解決這個問題?

+6

'return this .__ parameters;'would not that recursive and never return? – Powerlord

+2

你也可能懷疑你不使用setter中的'value',並且你有公共領域。 –

+0

不知道你的錯誤來自哪裏,但你的getter是無限遞歸的,你的setter忽略了'value',最後後臺是公共的。 – CodesInChaos

回答

1

一個getter返回另一變量本身並不是無限循環。也許你想從參數中返回一些東西。此外,你的setter總是創建一個新的字典,並添加相同的東西。你想做什麼?

嘗試這樣的事情

 public string __Parameters 
    { 
     get { return this.recreate(); } 
     set 
     { 
      Parameters = parse(value)); 
     } 
    }  

    public Dictionary<string, string> Parameters; 

在解析功能可按需要在一個字符串,它並將它分解成字典。並且重新創建函數使用字典重新創建字符串。

也這樣做:

public Dictionary<string, string> Parameters = new Dictionary<String,String>(); 

讓你不小心弄空指針因爲你只需要在我看來,一個字典。 (當你解析一個新的字符串時,不要忘記清除它)。

+0

我想從DataContract中解析__Parameters。 –

+0

所以你會收到一個字符串,你想把它們分解成鍵值對然後存儲它們?當有人調用getter時,你想返回原始字符串? –

+0

是的。 –

4

你有沒有注意到在吸氣

public string __Parameters { 
    get { 
     return this.__Parameters; 
    } 
......... 
+0

+1也打我吧 – psubsee2003

0

您定義的getter引入了遞歸調用。

public string __Parameters { 
    get { 
     return this.__Parameters; 
    } 
} 

試着改變這個.__參數;通過

private string _parameters 
public string __Parameters { 
    get { 
     return this._parameters; 
    } 
}