1

私はどちらかというと Java-Guy なので、C# でのゲッター/セッターの処理は私にとって少し新しいものです。なぜこれが機能しないのですか?

public String lastmodified {
            get { return this.lastmodified; }
            set 
            { 
                long ms = Int64.Parse(value);
                var date = new DateTime(1970, 1, 1).AddSeconds(ms);
                date.ToLocalTime();
                this.lastmodified = date.ToString("HH_mm_yyyy");
            }
        }

このコードの値は、1987123019 のような文字列です。

4

3 に答える 3

8

最後の行でプロパティ自体を割り当てているためです。プロパティまたはフィールドを区別するには、異なる大文字と小文字またはアンダースコアを使用する必要があります。

標準の C# 命名規則をお勧めします。また、データをネイティブ形式で保存します。また、ドリイスが言ったこと。

private DateTime lastModified;
public String LastModified {
        get { return lastModified.ToString("HH_mm_yyyy"); }
        set 
        { 
            long ms = Int64.Parse(value);
            var date = new DateTime(1970, 1, 1).AddSeconds(ms);
            date = date.ToLocalTime();
            lastModified = date;
        }
    }
于 2012-09-15T12:36:36.680 に答える
4

set(さらに言えば) の最後の行でプロパティ セッターを再帰的に呼び出しているため、これにより StackOverflowException が発生しますget。値をクラスのフィールドに割り当て、ゲッターでそのフィールドから読み取る必要があります。現在のコードは、スタック スペースがなくなるまで、同じプロパティ アクセサー メソッドを無限に呼び出すだけです。

一般的な C# の命名規則では、プロパティ名とメソッド名には PascalCasing を、インスタンス変数にはキャメル ケーシングを提案しています。

このコードは動作するはずです:

private string lastModified; // instance variable
public string LastModified 
{
    get { return this.lastModified; }
    set 
    { 
        long ms = Int64.Parse(value);
        var date = new DateTime(1970, 1, 1).AddSeconds(ms);
        date = date.ToLocalTime();
        this.lastModified = date.ToString("HH_mm_yyyy");
    }
}

また、「機能していない」というのは広い意味です。ToLocalTimeしかし、メソッドが日付に適用されないことがわかると思います。これはDateTime、C# ではイミュータブルであるため、構築後に変更することはできません。date変数を次の結果に割り当てる必要がありますToLocalTime()

date = date.ToLocalTime();
于 2012-09-15T12:37:20.487 に答える
0

プロパティ プロシージャの場合、ゲッターは「ラップされた」値を保持するクラス メンバー変数の値を返す必要があります。セッターの場合、インバウンド値をそのクラス メンバー変数に割り当てる必要があります。あなたがしていることは、プロパティを自己参照にします。

于 2012-09-15T12:41:19.300 に答える