C#在运行时添加属性

时间:2012-06-21 08:26:11

标签: c#

我读了几篇帖子,而且我在运行时向类中添加属性时仍遇到麻烦。它应该很简单,因为我有这样一个类:

public class MyClass
    {
        String Template;
        String Term;
     }

在运行时,我必须添加一些属性,如电话,电子邮件(它取决于......)。 有人可以解释一下如何在类初始化期间添加这些属性吗?

Srecko

3 个答案:

答案 0 :(得分:4)

我不认为在这里添加属性是正确的。 诸如“电子邮件”或“电话”之类的属性只是一些密钥和值的附加对。您可以使用Dictionary,但这会阻止您多次使用密钥(例如,联系人的多个电子邮件地址)。所以你也可以使用List<KeyValuePair<string, string>>。像那样:

public class MyClass
{
    String Template;
    String Term;
    public List<KeyValuePair<string, string>> Attributes { get; private set; }

    public MyClass() {
        Attributes = new List<KeyValuePair<string, string>();
    }

    public void AddAttribute(string key, string value) {
        Attributes.Add(new KeyValuePair<string, string>(key, value));
    }
}

// to be used like this: 
MyClass instance = new MyClass();
instance.AddAttribute("Email", "test@example.com");
instance.AddAttribute("Phone", "555-1234");

答案 1 :(得分:3)

如果你有c#4.0,你可以使用Expando对象。

对于早期版本的c#,通常接受的方法是创建一个“属性包”,即键值对的集合(或字典)

dynamic foo = new ExpandoObject();
foo.Bar = "test";

答案 2 :(得分:1)

你可以为你的Key / Value-Pairs添加一个字典。 然后,如果添加属性,只需将Key = AttributenameValue = YourValue添加到字典中即可。 阅读也很简单 - 只需从你的字典中获取Key = Attributename的值。