0

私はそれがどのように機能するのか理解していないと考えなければなりません。

私の具体的な質問は次のとおりです。セッターもバッキングリスト変数もないのに、リストプロパティ要素の値を設定できるのはなぜですか?

説明させてください。次の CustomerTable クラスがあるとします。

public List<string> Name
{
    get
    {
        var names = new List<string>();
        foreach (CustomerRow row in Rows)
        {
            name.Add(row.Name);
        }
        return names;
    }
}

アイデアは、行のリストが既にあるため、クラスでデータを複製することなく、読み取り専用プロパティに列の内容を表示させることです。

とにかく、次のようなコードが Visual Studio で受け入れられ、エラーが発生することはありません (さらに、エラーなしでコンパイルすることもできます)。

Name[0] = "John";

なぜこれが合法なのか理解できません。私のプロパティにはセット { } がなく、変更するバッキング リストさえありません。このコードは何をするためのものですか?

メソッドのように機能するべきではありませんか?誰かが「取得」するたびに生成するリスト以外に、保存されたリストは本当にありますか?

(ご要望に応じて詳細をお伝えできます。また、その他のご意見にも感謝いたします)

4

2 に答える 2

4

プロパティを設定するのではなく、プロパティ(リスト)を取得してから操作します(この例では、最初のメンバーを変更します)。あなたがしようとした場合:

Name = new List<string>();

予期していたコンパイル エラーが発生します。毎回新しいリストを作成しているため、Rowsプロパティは読み取り専用のままであることに注意してください (他の場所に公開されていないと仮定します)。返されたコレクションへの変更が無意味であることを明確にしたい場合は、Nameプロパティのタイプを次のように変更できますIEnumerable<string>

public IEnumerable<string> Name
{
    get
    {
        return Rows.Select(row => row.name); //LINQ is more elegant here
    }
}
于 2012-05-19T19:35:57.530 に答える
1

あなたの例では設定しません(Name実際には読み取り専用です)が、に含まれる最初のリスト要素Nameを設定します。要素。Name[0]List<string>

于 2012-05-19T19:44:03.167 に答える