首页 > 解决方案 > 寻求帮助尝试从两个不同的类打印类属性到控制台,但在输入时保持它们配对

问题描述

我正在为我在实例化类上做的教程做“家庭作业”。我试图弄清楚如何在最后将用户的名字和姓氏以及他们输入的地址打印到控制台。我有一个具有名字和姓氏属性的公共类,以及另一个具有街道地址、城市、州、邮政编码属性的公共类,然后是第三个类来“处理”向控制台输出的数据. 我想要完成的是输入用户数据,完成后将其打印到控制台,如下所示:

姓名:Fred Durst 地址:1234 Fake Street N. Fake City, FS 69696

姓名:Bill Muri 地址:4321 Fake Street S. Fake City, FS 69696

我只知道如何让它打印所有的名字,然后是所有的地址。我在这里进行了一些搜索,但了解的不够多,无法真正理解我正在阅读的答案,以及它们是否适用于我的场景。

主程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleUI
{
    class Program
    {
        static void Main(string[] args)
        {
            string firstName = "";
            List<PersonModel> people = new List<PersonModel>();
            List<AddressModel> address = new List<AddressModel>();

            do
            {
                Console.Write("What is your first name? (type exit to stop): ");
                firstName = Console.ReadLine();

                if (firstName.ToLower() != "exit")
                {
                    Console.Write("What is your last name?: ");
                    string lastName = Console.ReadLine();

                    Console.Write("What is your Street Address?: ");
                    string streetAddress = Console.ReadLine();

                    Console.Write("What is the city you live in?: ");
                    string city = Console.ReadLine();

                    Console.Write("What is the state you live in?: ");
                    string state = Console.ReadLine();

                    Console.Write("What is your zip code?: ");
                    string zipCode = Console.ReadLine();
                    bool isValid = int.TryParse(zipCode, out int outputZipCode);

                    PersonModel person = new PersonModel();
                    person.UserFirstName = firstName;
                    person.UserLastName = lastName;
                    people.Add(person);

                    AddressModel userAddress = new AddressModel();
                    userAddress.UserStreetAddress = streetAddress;
                    userAddress.UserCity = city;
                    userAddress.UserState = state;
                    userAddress.UserZipCode = outputZipCode;
                    address.Add(userAddress);

                }
            } while (firstName.ToLower() != "exit");


            foreach (PersonModel p in people)
            {
                ProcessPerson.GreetPerson(p);
            }
            foreach (AddressModel a in address)
            {
                ProcessPerson.SayUserAddress(a);
            }

            Console.ReadLine();
        }
    }
}

地址模型类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleUI
{
    public class AddressModel
    {
        public string UserStreetAddress { get; set; }
        public string UserCity { get; set; }
        public string UserState { get; set; }
        public int UserZipCode { get; set; }

        public bool HasBeenGreeted { get; set; }
    }
}

人物模型类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleUI
{
    public class PersonModel
    {
        public string UserFirstName { get; set; }
        public string UserLastName { get; set; }

        public bool HasBeenGreeted { get; set; }
    }
}

ProcessPerson 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleUI
{
    public static class ProcessPerson
    {
        public static void GreetPerson(PersonModel person)
        {
            Console.WriteLine($"Hello { person.UserFirstName } { person.UserLastName }");
            //Console.WriteLine($"Your Address is: { userAddress.UserStreetAddress } { userAddress.UserCity } { userAddress.UserState } { userAddress.UserZipCode }");
            person.HasBeenGreeted = true;
        }

        public static void SayUserAddress(AddressModel userAddress)
        {
            Console.WriteLine($"Your Address is: { userAddress.UserStreetAddress } { userAddress.UserCity } { userAddress.UserState } { userAddress.UserZipCode }");
            userAddress.HasBeenGreeted = true;
        }
    }        
}

标签: c#classprintingpropertiesconsole

解决方案


您需要一种将地址与人相关联的方法。现在,一旦每次循环迭代结束,您就无法知道一个人的地址。

如果每个人有一个地址,则添加一个PersonModel类型的属性AddressModel

public class PersonModel
{
    public string UserFirstName { get; set; }
    public string UserLastName { get; set; }    
    public bool HasBeenGreeted { get; set; }

    public AddressModel Address {get; set;}
}

然后在您的代码中,设置属性而不是将地址添加到列表中:

AddressModel userAddress = new AddressModel();
userAddress.UserStreetAddress = streetAddress;
userAddress.UserCity = city;
userAddress.UserState = state;
userAddress.UserZipCode = outputZipCode;

//instead of this:
//address.Add(userAddress);

// do this:
person.Address = userAddress;

然后就可以person.Address.<any property>在控制台输出中使用了。


推荐阅读