c# - 寻求帮助尝试从两个不同的类打印类属性到控制台,但在输入时保持它们配对
问题描述
我正在为我在实例化类上做的教程做“家庭作业”。我试图弄清楚如何在最后将用户的名字和姓氏以及他们输入的地址打印到控制台。我有一个具有名字和姓氏属性的公共类,以及另一个具有街道地址、城市、州、邮政编码属性的公共类,然后是第三个类来“处理”向控制台输出的数据. 我想要完成的是输入用户数据,完成后将其打印到控制台,如下所示:
姓名: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;
}
}
}
解决方案
您需要一种将地址与人相关联的方法。现在,一旦每次循环迭代结束,您就无法知道一个人的地址。
如果每个人有一个地址,则添加一个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>
在控制台输出中使用了。
推荐阅读
- vba - 我可以让 Access 使用文件名的可变部分和文件名的固定部分自动命名文件导出吗
- javascript - 返回组件时如何重构&&()
- c# - 回滚迁移错误 不允许从数据类型 datetime 到 int 的隐式转换。使用 CONVERT 函数运行此查询
- c# - 为什么在我的 C# MVC 部署的应用程序中会触发此对象引用异常?
- mongodb - 从 mongo 集合中选择特定字段不起作用
- sql - AgensGraph 中的混合查询示例
- laravel - 如何将数据从一张表移动到另一张表?
- javascript - Firefox 中的 WebRTC 事件
- java - 如果文件存在,如何创建备份文件
- java - RestAssured with Mockito:模拟 dao 存储库