internal static IList <ContactLinkingSuggestion> GetSuggestions(CultureInfo culture, IList <ContactInfoForSuggestion> personContacts, IEnumerable <ContactInfoForSuggestion> otherContacts)
        {
            Dictionary <PersonId, ContactLinkingSuggestion> dictionary = new Dictionary <PersonId, ContactLinkingSuggestion>();

            foreach (ContactInfoForSuggestion contactInfoForSuggestion in otherContacts)
            {
                if (!WellKnownNetworkNames.IsHiddenSourceNetworkName(contactInfoForSuggestion.PartnerNetworkId, contactInfoForSuggestion.ParentDisplayName))
                {
                    foreach (ContactInfoForSuggestion personContact in personContacts)
                    {
                        ContactLinkingSuggestion contactLinkingSuggestion = ContactLinkingSuggestion.Create(culture, personContact, contactInfoForSuggestion);
                        if (contactLinkingSuggestion != null)
                        {
                            ContactLinkingSuggestion b;
                            if (dictionary.TryGetValue(contactLinkingSuggestion.PersonId, out b))
                            {
                                if (ContactLinkingSuggestion.Compare(contactLinkingSuggestion, b) > 0)
                                {
                                    dictionary[contactLinkingSuggestion.PersonId] = contactLinkingSuggestion;
                                }
                            }
                            else
                            {
                                dictionary.Add(contactLinkingSuggestion.PersonId, contactLinkingSuggestion);
                            }
                        }
                    }
                }
            }
            List <ContactLinkingSuggestion> list = new List <ContactLinkingSuggestion>(dictionary.Values);

            list.Sort(new Comparison <ContactLinkingSuggestion>(ContactLinkingSuggestion.Compare));
            if (list.Count > ContactLinkingSuggestion.MaximumSuggestions.Value)
            {
                list.RemoveRange(ContactLinkingSuggestion.MaximumSuggestions.Value, list.Count - ContactLinkingSuggestion.MaximumSuggestions.Value);
            }
            return(list);
        }
        internal static int Compare(ContactLinkingSuggestion a, ContactLinkingSuggestion b)
        {
            Util.ThrowOnNullArgument(a, "a");
            Util.ThrowOnNullArgument(b, "b");
            int num = ContactLinkingSuggestion.Compare(a.SurnameMatch && a.GivenNameMatch, b.SurnameMatch && b.GivenNameMatch);

            if (num != 0)
            {
                return(num);
            }
            num = ContactLinkingSuggestion.Compare(a.AliasOfEmailAddressMatch, b.AliasOfEmailAddressMatch);
            if (num != 0)
            {
                return(num);
            }
            num = ContactLinkingSuggestion.Compare(a.PhoneNumberMatch, b.PhoneNumberMatch);
            if (num != 0)
            {
                return(num);
            }
            num = ContactLinkingSuggestion.Compare(a.PartialSurnameMatch, b.PartialSurnameMatch);
            if (num != 0)
            {
                return(num);
            }
            num = ContactLinkingSuggestion.Compare(a.PartialGivenNameMatch, b.PartialGivenNameMatch);
            if (num != 0)
            {
                return(num);
            }
            num = ContactLinkingSuggestion.Compare(a.PartialAliasOfEmailAddressMatch, b.PartialAliasOfEmailAddressMatch);
            if (num != 0)
            {
                return(num);
            }
            return(0);
        }