C# 在C语言中,如何使用变量的内容访问对象属性

C# 在C语言中,如何使用变量的内容访问对象属性,c#,office-interop,outlook-addin,C#,Office Interop,Outlook Addin,我有一个展望,addin,并试图避免世界上最大的转变。要获取联系信息,我使用以下项目:Microsoft.Office.Interop.Outlook.ContactItem.EmailAddress 因为有很多项目,我想使用一个变量来选择项目,比如字符串myVariable=EmailAddress;或字符串myVariable=FullName;然后使用ContactItem.myVariable。这些项是从xml文件中提取的。我画的是空白,需要一些帮助。谢谢。我想您可以通过使用反射创建一个

我有一个展望,addin,并试图避免世界上最大的转变。要获取联系信息,我使用以下项目:Microsoft.Office.Interop.Outlook.ContactItem.EmailAddress
因为有很多项目,我想使用一个变量来选择项目,比如字符串myVariable=EmailAddress;或字符串myVariable=FullName;然后使用ContactItem.myVariable。这些项是从xml文件中提取的。我画的是空白,需要一些帮助。谢谢。

我想您可以通过使用反射创建一个检查属性的扩展方法

不过,请记住你的发帖中的一些评论:

using Outlook = Microsoft.Office.Interop.Outlook;

public static class ContactItemExtension
{
    public static object Get(this Outlook.ContactItem item, string property)
    {
        object result = null;
        if (item == null) {
            // default null
            return result;
        }
        var ctype = item.GetType();
        var cprop = ctype.GetProperty(property);
        if (cprop == null || cprop.GetGetMethod() == null) {
            // no property found or it doesn't have a get
            return result;
        }
        result = cprop.GetValue(item, null);
        return result;
    }
}
在此之后,您可以简单地调用Get方法,该方法的属性名位于任何ContactItem的顶部

item.Get("EmailAddress1");

假设所讨论的对象不仅仅是动态的,使用@lucastrezesniewski所评论的。另一方面,如果它是dynamic类型,那么我们处于一个完全不同的世界,那么请检查反射是否有效,如果无效,请返回给我们。世界上最大的开关是什么意思?分享你的代码或一些原型,传达你现在正在做的事情,我们将能够更好地帮助你。好的,我正在尝试反思,还有很多要学的。在上面的示例代码中,item.GetType正在引发异常。我将继续这样做。我所说的大开关语句是指一个联系人中有大约50个属性,另外用户可以添加更多属性。我创建了一个xml文件,用户可以在其中输入要放入excel模板中的哪些单元格的联系人属性。我要去学习更多关于反思的知识。@IcepicklsThanks再次寻求建议。如上所述,我无法延长工作期限。我没有放弃,而是把它放在一边,用暴力手段。循环浏览所有属性并与我要插入到电子表格中的属性进行匹配。抱歉,这里没有经验。您的意思是希望在不知道属性名称的情况下循环浏览所有可用的联系人属性以获取非空、非空的值吗?