如何解决寻求帮助尝试从两个不同的类打印类属性到控制台,但保持它们在输入时配对
我正在为我在实例化类上做的教程做“家庭作业”。我试图弄清楚如何在最后将用户的名字和姓氏以及他们输入的地址打印到控制台。我有一个具有名字和姓氏属性的公共类,另一个具有街道地址、城市、州、邮政编码属性的公共类,然后是第三个类来“处理”到控制台的数据输出.我想要完成的是输入用户数据,完成后将其打印到控制台,如下所示:
姓名:弗雷德·德斯特 地址:1234 Fake Street N. Fake City,FS 69696
姓名:比尔·穆里 地址: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; }
}
}
PersonModel 类:
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;
}
}
}
解决方法
您需要一种将地址与人联系起来的方法。现在,一旦每次循环迭代结束,您就无法知道某人的地址。
如果每个人有一个地址,则向 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>
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。