-6

私がこのようなクラスを持っているとしましょう:

class public Person
{
    public string firstName;
    public string lastName;
    public string address;
    public string city;
    public string state;
    public string zip;

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

さらに、次のようなタイプのPersonのリストを作成するとします。

List<Person> pList = new List<Person>;
pList.Add(new Person("Joe", "Smith");

ここで、Joe Smithの住所、都市、州、およびzipを設定したいのですが、オブジェクトはすでにリストに追加されています。では、オブジェクトがリストに追加された、これらのメンバー変数を設定するにはどうすればよいですか?

ありがとうございました。

4

5 に答える 5

4

アイテムをリストから戻し、次のように設定します。

pList[0].address = "123 Main St.";
于 2013-02-01T16:14:15.297 に答える
3

オブジェクトへの参照を保持できます。次のように追加してみてください。

List<Person> pList = new List<Person>;
Person p = new Person("Joe", "Smith");
pList.Add(p);
p.address = "Test";

または、リストから直接アクセスすることもできます。

pList[0].address = "Test";
于 2013-02-01T16:15:20.823 に答える
2

次のようにリストの最初のアイテムを取得できます。

Person p = pList[0];またPerson p = pList.First();

次に、必要に応じて変更できます。

p.firstName = "Jesse";

また、自動プロパティを使用することをお勧めします。

class public Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string address { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string zip { get; set; }

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

同じ結果が得られますが、入力を確認したり、項目の設定方法を変更したりする日は、はるかに簡単になります。

class public Person
{
    private const int ZIP_CODE_LENGTH = 6;
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string address { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    private string zip_ = null;
    public string zip 
    { 
        get { return zip_; } 
        set
        {
            if (value.Length != ZIP_CODE_LENGTH ) throw new Exception("Invalid zip code.");
            zip_ = value;
        }
    }

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

ここでプロパティを設定するときにクラッシュするのはおそらく最善の決定ではありませんが、SetZipCode(...);どこでも関数を呼び出さなくても、オブジェクトの設定方法をすばやく変更できるという一般的な考え方が得られます。これがOOPのカプセル化のすべての魔法です。

于 2013-02-01T16:15:33.013 に答える
1

リストで探している要素を見失った場合は、いつでもLINQを使用して要素を再度見つけることができます。

pList.First(person=>person.firstName == "John").lastName = "Doe";

または、すべての「Doe」を一度に再配置する必要がある場合は、次の操作を実行できます。

foreach (Person person in pList.Where(p=>p.lastName == "Doe"))
{
    person.address = "Niflheim";
}
于 2013-02-01T16:19:41.950 に答える
1

インデックスからアイテムにアクセスできます。追加された最後のアイテムを検索する場合は、リストの長さ-1を使用できます。

List<Person> pList = new List<Person>;
// add a bunch of other items....
// ....
pList.Add(new Person("Joe", "Smith");
pList[pList.Length - 1].address = "....";
于 2013-02-01T16:17:42.153 に答える