-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 设置地址、城市、州和邮政编码,但我已经将对象添加到列表中。那么,在将对象添加到列表后,如何设置这些成员变量呢?

谢谢你。

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 回答