0

考虑以下代码:

[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' 必须声明一个主体,因为它没有标记为抽象、外部或部分

奇怪的是,get声明一个主体。那么,如何解决这个问题?

4

3 回答 3

4

你有没有注意到getter中的无限循环

 public string __Parameters {
    get {
        return this.__Parameters;
    }
 .........
于 2012-05-10T15:25:36.587 回答
1

getter 返回另一个变量而不是它自己。也许你想从参数中返回一些东西。此外,您的 setter 总是创建一个字典并将相同的内容添加到其中。你想做什么?

尝试这样的事情

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

    public Dictionary<string, string> Parameters;

解析函数接受一个字符串,将其分解并将其存储到字典中。并且 recreate 函数使用字典重新创建字符串。

也这样做:

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

这样您就不会意外获得空指针,而且我认为您只需要一本字典。(当你解析一个新的 String 时不要忘记清除它)。

于 2012-05-10T15:27:33.250 回答
0

您定义好的吸气剂引入了递归调用。

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

尝试改变 this.__Parameters; 经过

private string _parameters 
public string __Parameters {
    get {
        return this._parameters;
    }
}
于 2012-05-10T15:30:35.587 回答