C# add properties at runtime

前端 未结 3 1789
臣服心动
臣服心动 2021-01-14 23:18

I\'ve read few posts, and I\'m still having troubles with adding properties to a class in runtime. It should be simple, because I have a class like this:

pub         


        
相关标签:
3条回答
  • 2021-01-14 23:22

    I don't think adding a property is the right thing to do here. The attributes like "Email" or "Phone" are just some additional pairs of a key and a value. You could use a Dictionary, but that would prevent you from using a key more than once (more than one email address for a contact for example). So you could just as well use a List<KeyValuePair<string, string>>. Like that:

    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");
    
    0 讨论(0)
  • 2021-01-14 23:30

    If you have c# 4.0 you can use the Expando object.

    for earlier versions of c#, the generally accepted way of doing this is to create a "property bag" i.e. a collection (or dictionary) of key value pairs

    dynamic foo = new ExpandoObject();
    foo.Bar = "test";
    
    0 讨论(0)
  • 2021-01-14 23:34

    you could add an dictionary with for your Key/Value-Pairs. Then if you add your attributes you just add Key = Attributename, Value = YourValue to the dictionary. Reading is as easy - just get the Value to the Key = Attributename from your dictionary.

    0 讨论(0)
提交回复
热议问题