0

我想遍历联系人属性并将包含“数字”一词的属性添加到具有该值的列表中,我尝试使用反射但它不起作用。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.Office.Interop.Outlook;

namespace DuplicateNumbers
{
    public class ContactService
    {
        public ContactItem Contact { get; private set; }

        private IDictionary<string,string> phoneNumbers = new Dictionary<string, string>();

        public ContactService(ContactItem contact)
        {
            Contact = contact;
        }

        public IDictionary<string,string> PhoneNumbers
        {
            get
            {
                if(phoneNumbers.Count == 0)
                {
                    PopulatePhoneNumbers();
                }
                return phoneNumbers;
            }
        }

        private void PopulatePhoneNumbers()
        {
            _ContactItem ci = Contact as _ContactItem;
            MemberInfo[] members = ci.GetType().FindMembers(MemberTypes.All, BindingFlags.Instance, (m,criteria) => true, null);
            foreach (var info in members)
            {
                if(info.Name.Contains("Number"))
                {
                    phoneNumbers.Add(info.Name,info.Value);
                }
                Console.WriteLine(info);
            }
        }
    }
}
4

3 回答 3

1

尝试使用 MAPI CDO。

这是一个可以帮助您入门的微软网站:如何使用 CDO 读取 MAPI 地址

这里有一些 MAPI 博客也可以提供帮助:

于 2008-10-23T21:41:45.977 回答
0

因为它不起作用——它是一个 COM 对象。您应该使用 CDO 空间中的属性。

于 2008-10-16T04:13:37.797 回答
0

这似乎能够访问 Outlook.ContactItem 属性。 枚举 Outlook ContactItem 属性

于 2019-12-07T07:17:57.993 回答