«Указанный ключ отсутствует в словаре» EmailAddresses [EmailAddressKey.EmailAddress1] .Address - PullRequest
0 голосов
/ 14 февраля 2019

В моем приложении я обновляю существующие контакты или добавляю их, если их нет.Я проверяю идентификатор электронной почты контакта в папке контактов Outlook.Обновление или создание функциональности.Когда я использовал Outlook 2010, приложение работало нормально.При обновлении до Outlook 2016 для того же кода было выдано сообщение об ошибке.

То, что я пробовал для Outlook 2010 и работало до последнего обновления Outlook:

List<Contact> result = new List<Contact>();
result = con.Where(x => x.EmailAddresses[EmailAddressKey.EmailAddress1].Address.ToLower().Equals(email.ToLower())).ToList();

Этот запрос "Данный ключ былотсутствует в словаре »ошибка в строке результата = при обновлении Outlook до версии 2016.

// Получить все контакты из папки.Выбирает все контакты

      if (contactItems.TotalCount > 0)
            {
                service.LoadPropertiesForItems(contactItems, view.PropertySet);
                foreach (var item in contactItems.Items)
                {
                    if (item is Contact)
                    {
                        con.Add(item as Contact);    
                    }
                }
            }

// Поиск контакта, адрес электронной почты которого совпадает с

List<Contact> result = new List<Contact>();
result = con.Where(x => x.EmailAddresses.Contains(EmailAddressKey.EmailAddress1).Equals(email)).ToList();

Версия Outlook 2010:

result = con.Where(x => x.EmailAddresses[EmailAddressKey.EmailAddress1].Address.ToLower().Equals(email.ToLower())).ToList();

Это работало просто отлично

Обновленная версия Outlook 2016: Приведенная выше логика вызвала исключение Ключ не найден.Поэтому я изменил его на:

result = con.Where(x => x.EmailAddresses.Contains(EmailAddressKey.EmailAddress1).Equals(email)).ToList();

Я хочу проверить, где обе строки сравниваются с .ToLower, поскольку многие идентификаторы электронной почты имеют заглавные буквы.

Мои сомнения: Почему я получилОшибка?Версия меняет проблему здесь?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Обновление: это то, что я сделал

foreach (Contact item in contactItems.Items)
                        {
                            if (item is Contact)
                            {
                                    EmailAddress emAdd;
                                    var emailVal = item.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out emAdd);

// Список, в котором хранится формат строки, SMTP-адрес электронной почты con.Add (emAdd.Address);

                            }
                        }

Iзатем найдите в списке нужную мне электронную почту.Если электронная почта присутствует, то контактные данные обновляются.Если адрес электронной почты отсутствует, создается новый контакт.

0 голосов
/ 14 февраля 2019

Вы можете использовать TryGetValue() примерно так:

EmailAddress email;
var success = contact.EmailAddresses.TryGetVaue(EmailAddressKey.EmailAddress1, out email);

if (success)
{
    // Do stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...