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」は、abstract、extern、または partial とマークされていないため、本体を宣言する必要があります

奇妙なことは、getbody を宣言していることです。それで、これを修正する方法は?

4

3 に答える 3

4

getter の無限ループに気付きましたか?

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

ゲッターは、それ自体ではなく別の変数を返します。パラメータから何かを返したいと思うかもしれません。さらに、セッターは常に新しい辞書を作成し、同じものを追加します。あなたは何をしようとしているのですか?

このようなことを試してください

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

誤って null ポインターを取得しないようにするため、および私の意見では辞書が 1 つしか必要ないためです。(ただし、新しい String を解析するときは、クリアすることを忘れないでください)。

于 2012-05-10T15:27:33.250 に答える
0

定義したゲッターは再帰呼び出しを導入します。

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

これを変更してみてください。__Parameters; に

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