/// <summary> /// Merges two contacts into single contact. /// </summary> /// <param name="firstContact">The first contact.</param> /// <param name="secondContact">The second contact.</param> /// <returns>the merged contact.</returns> public static Contact Merge(Contact firstContact, Contact secondContact) { Check.NotNull(firstContact, "firstContact"); Check.NotNull(secondContact, "secondContact"); if (firstContact.FullName != secondContact.FullName) throw new InvalidOperationException("Cannot merge contacts from different users!"); Contact mergedContact = firstContact.Copy(); mergedContact.Accounts = firstContact.Accounts | secondContact.Accounts; return mergedContact; }
/// <summary> /// Separates contacts. /// </summary> /// <param name="contact">The contact</param> /// <returns>a list with contacts.</returns> public static IEnumerable<Contact> Separate(Contact contact) { var accounts = EnumHelper.GetFlags(contact.Accounts); if (accounts.Count() == 1) throw new InvalidOperationException("The contact has only one account"); foreach (var account in accounts) { Contact newContact = contact.Copy(); newContact.Accounts = (Accounts)account; yield return newContact; } }