确定Outlook 2010中是否存在通讯簿

时间:2012-09-07 08:25:04

标签: c# vsto outlook-addin outlook-2010

我创建了一个地址簿,如here所述,它就像一个魅力。然后我想访问它 - 首先检查它是否存在(并在相反的情况下创建它),然后引用它。

我当前的代码依赖于Exception来检测丢失的名称文件夹,在我看来,这是一个丑陋的解决方法。我没有找到一种更整洁的方法,例如.DoesFolderExist等。我想就如何改进它提出建议。

Outlook.Folder contacts = 
  this.Application.Session.GetDefaultFolder(
    Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
Outlook.Folder addressBook = null;

try { addressBook = contacts.Folders["My AB"] as Outlook.Folder; }
catch (Exception) { }

if (addressBook == null)
{
    addressBook = contacts.Folders.Add("My AB", 
      Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
    addressBook.ShowAsOutlookAB = true;
}

我应该使用this.Application.Session.GetFolderFromID(...)吗?问题是我需要指定地址簿的名称(我有)和商店ID(我没有)。我不想去那里,但方法GetFolderFromID的语法表明可能有两个不同的地址簿,名称相同但放在不同的商店。它是这样还是contact.Folder["name"]就足够了?

1 个答案:

答案 0 :(得分:3)

您可以使用try / catch-statement方法,但更好的方法是遍历每个Folder以避免异常和性能损失。

Outlook.Folders contactFolders = contacts.Folders;
if (contactFolders.Cast<Outlook.Folder>()
  .Where(c => c.Name == "My AB").Count() > 0)
    addressBook = contactFolders["My AB"] as Outlook.Folder;