在 C#.NET 中定义 getter,声明的正文不被接受

本文关键字:正文 声明 NET 定义 getter | 更新日期: 2023-09-27 18:33:42

请考虑以下代码:

[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已经宣布了一个身体。那么,如何解决这个问题呢?

在 C#.NET 中定义 getter,声明的正文不被接受

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

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

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

尝试这样的事情

        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>();

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

您定义的getter很好地引入了递归调用。

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

尝试更改this.__Parameters;

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