使用 SetColumns 高效枚举文件夹中的项

本示例演示如何提高使用 SetColumns(String) 方法枚举 Items 集合以缓存集合中每个项目的特定属性时的性能。

示例

注意

下面的代码示例摘录自 Microsoft Office Outlook 2007 应用程序编程

若要枚举集合中的项目,需使用 SetColumns 方法来缓存 Items 集合上的属性。 SetColumns 采用一个表示属性名称的逗号分隔的字符串参数。 在枚举了集合中的所有项目之后,调用 ResetColumns() 方法以清除属性缓存。

在下面的代码示例中,EnumerateContactsWithSetColumns 使用 SetColumns 方法,以缓存“联系人”文件夹中项的 FileAsCompanyNameJobTitle 属性。 请注意,必须要测试限制中是否有空字符串或空引用。

请注意,Outlook 文件夹可能会包含不同类型的项。 此代码示例利用创建用于访问常见 Outlook 项成员的帮助程序类一文中定义的 OutlookItem 帮助程序类,便捷地调用 OutlookItem.Class 属性,以验证文件夹中的筛选后项子集中每一项的邮件类别,再假设项为联系人项。

如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 using 语句直接添加到此代码示例中的函数前面,这个语句必须后跟公共类声明。 下面的代码行演示了如何在 C# 中执行导入和分配。

using Outlook = Microsoft.Office.Interop.Outlook;
private void EnumerateContactsWithSetColumns()
{
    // Obtain Contacts folder
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderContacts)
        as Outlook.Folder;
    string filter = "Not([CompanyName] Is Null)" +
        " AND Not([JobTitle] Is Null)";
    Outlook.Items items = folder.Items.Restrict(filter);
    items.SetColumns("FileAs, CompanyName, JobTitle");
    for (int i = 1; i <= items.Count; i++)
    {
        // Create an instance of OutlookItem
        OutlookItem myItem = new OutlookItem(items[i]);
        if (myItem.Class == Outlook.OlObjectClass.olContact)
        {
            // Use InnerObject to return ContactItem
            Outlook.ContactItem contact =
                myItem.InnerObject as Outlook.ContactItem;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(contact.FileAs);
            sb.AppendLine(contact.CompanyName);
            sb.AppendLine(contact.JobTitle);
            sb.AppendLine();
            Debug.WriteLine(sb.ToString());
        }
    }
    items.ResetColumns();
}

另请参阅