You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实例化类作业:如何成对打印关联的PersonModel与AddressModel属性

错位输出的核心原因
  • 你当前把人员信息、地址信息拆成了两个完全独立的集合:List<PersonModel>和List<AddressModel>,输出时用两个连续的foreach先后遍历两个集合,自然会出现“先输出所有用户姓名,再输出所有用户地址”的错位问题。
  • 由于你在录入环节是每收集完一条完整的用户数据,就同步往两个集合各添加一条记录,两个集合的元素顺序、索引位置是严格一一对应的,不需要大改代码就能实现配对展示。
两种适配你现有代码结构的实现方案

方案1:最小代码改动 同步索引遍历

这个方案完全不修改你已经写好的两个Model类、静态处理类的结构,只需要替换Main方法里的输出逻辑,把两个独立的foreach改成按索引同步遍历两个集合:
替换原有两段foreach代码为:

// 按索引同步匹配对应人员和地址
for (int i = 0; i < people.Count; i++)
{
    ProcessPerson.GreetPerson(people[i]);
    ProcessPerson.SayUserAddress(address[i]);
}

再把ProcessPerson里的方法输出内容调整为你需要的格式即可,不用修改方法签名:

public static class ProcessPerson
{
    public static void GreetPerson(PersonModel person)
    {
        // 匹配要求的姓名输出格式
        Console.WriteLine($"Name: {person.UserFirstName} {person.UserLastName}");
        person.HasBeenGreeted = true;
    }

    public static void SayUserAddress(AddressModel userAddress)
    {
        // 匹配要求的地址排版,加换行分割每一组记录
        Console.WriteLine($"Address: {userAddress.UserStreetAddress} {userAddress.UserCity}, {userAddress.UserState} {userAddress.UserZipCode}\n");
        userAddress.HasBeenGreeted = true;
    }
}

注意事项:两个集合的长度必须保持一致,一旦后续代码修改时出现某条记录漏加的情况,会触发索引越界异常,你当前的同步录入逻辑不存在这个问题。

方案2:面向对象规范写法 绑定类的关联关系

这个方案更贴合教程“类实例化关联”的考察目标,从根源上建立“人员-地址”的绑定关系,不需要维护两个独立集合,也不存在索引错位的风险:

  1. 给PersonModel类增加地址关联属性,直接把对应地址对象挂到人员实例上:
public class PersonModel
{
    public string UserFirstName { get; set; }
    public string UserLastName { get; set; }
    // 直接绑定对应的地址对象,无需单独维护地址集合
    public AddressModel UserAddress { get; set; }
    public bool HasBeenGreeted { get; set; }
}
  1. 调整Main方法的录入逻辑:删掉原来单独定义的List<AddressModel>集合,创建完地址对象后,直接把地址赋值给当前人员实例的属性:
// 删掉原来的 List<AddressModel> address = new List<AddressModel>();
// 录入分支内的赋值逻辑调整为
PersonModel person = new PersonModel();
person.UserFirstName = firstName;
person.UserLastName = lastName;

AddressModel userAddress = new AddressModel();
userAddress.UserStreetAddress = streetAddress;
userAddress.UserCity = city;
userAddress.UserState = state;
userAddress.UserZipCode = outputZipCode;
// 建立人和地址的绑定关系
person.UserAddress = userAddress;
people.Add(person);
  1. 输出时只需要遍历人员集合,直接读取每个人绑定的地址即可:
foreach (PersonModel p in people)
{
    ProcessPerson.GreetPerson(p);
    ProcessPerson.SayUserAddress(p.UserAddress);
}
最终输出效果

调整完成后控制台输出会完全匹配你要求的排版:

Name: Fred Durst
Address: 1234 Fake Street N. Fake City, FS 69696

Name: Bill Muri
Address: 4321 Fake Street S. Fake City, FS 69696

内容的提问来源于stack exchange,提问作者KungFuMullet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 00:45:03