Quote:
how to initialize and assign values multiple address and phone number.
There are several ways you can initialize/assign to whatever Collection data-structure you select to hold the multiple values. Here's an example that reflects the way I like to work:
public enum PhoneType
{
Other,
Home, Mobile
}
public enum AddressType
{
Other,
Home, Office, PO_Box
}
public class Person
{
public string Name { get; set; }
public DateTime? Dob { get; set; }
public Dictionary<PhoneType, List<int>> Phones { get; set; }
public Dictionary<AddressType, List<Address>> Addresses { get; set; }
public Person(string name,
DateTime? dob,
Dictionary<PhoneType, List<int>> phones = null,
Dictionary<AddressType, List<Address>> addresses = null
)
{
Name = name;
Dob = dob ?? DateTime.MinValue;
Phones = phones ?? new Dictionary<PhoneType, List<int>>();
Addresses = addresses ?? new Dictionary<AddressType, List<Address>>();
}
public void AddPhone(PhoneType ptype , int number)
{
if(Phones == null) Phones = new Dictionary<PhoneType, List<int>>();
if(! Phones.ContainsKey(ptype)) Phones.Add(ptype, new List<int>());
Phones[ptype].Add(number);
}
public void AddPhones(PhoneType ptype, List<int> phones)
{
if (Phones == null) Phones = new Dictionary<PhoneType, List<int>>();
if (!Phones.ContainsKey(ptype)) Phones.Add(ptype, new List<int>());
Phones[ptype].AddRange(phones);
}
public void RemovePhone(PhoneType ptype, int number)
{
var numbersbykey = Phones.FirstOrDefault(kvp => kvp.Key == ptype);
if (numbersbykey.Value != null && numbersbykey.Value.Contains(number)) numbersbykey.Value.Remove(number);
}
}
Notes:
1. I like using Enums since they both help document the code and are easily expanded/altered in the future
2. I like using Dictionaries with Enum values as Keys when each Key will store multiple values
3. I like writing explicit Add methods for adding one, or many, values to a collection. Keeps the Constructor uncluttered when there may be many variables/parameters.