C # добавить свойства во время выполнения

Я прочитал несколько постов, и у меня все еще есть проблемы с добавлением свойств к классу во время выполнения. Это должно быть просто, потому что у меня есть такой класс:

public class MyClass
    {
        String Template;
        String Term;
     }

Во время выполнения я должен добавить несколько атрибутов, таких как Телефон, Электронная почта (это зависит ...). Может кто-нибудь объяснить мне, как добавить эти свойства во время инициализации класса?

Srecko

 Rawling21 июн. 2012 г., 10:29
Почему вы чувствуете, что вам нужно добавить их во время выполнения? Почему вы не можете добавить их в определение своего класса?
 Srecko21 июн. 2012 г., 10:33
Это немного сложно объяснить, но мне нужно добавить их, когда я создаю экземпляр класса. Я не могу добавить их в определение класса, потому что таблица базы данных содержит несколько полей, и мне нужно добавить еще несколько во время выполнения.

Ответы на вопрос(3)

Затем, если вы добавляете свои атрибуты, вы просто добавляетеKey = Attributename, Value = YourValue в словарь. Чтение так же просто - просто получите ценность дляKey = Attributename из вашего словаря.

 Srecko21 июн. 2012 г., 11:49
к сожалению, я не могу принять два ответа. Ваш ответ был также полезен. Спасибо!

для более ранних версий c # общепринятый способ сделать это - создать «пакет свойств»; то есть набор (или словарь) пар ключ-значение

dynamic foo = new ExpandoObject();
foo.Bar = "test";
 21 июн. 2012 г., 10:42
ну, да, это динамический объект, и я полагаю, вы можете создавать их динамически. Он в значительной степени предназначен для работы в качестве типизированной сумки свойств, звучит так, как будто бы он подходит для вашей цели.
 Srecko21 июн. 2012 г., 10:39
У меня есть C # 4.0, но разве Expando не используется для динамически создаваемых объектов? В этом случае у меня уже есть класс, и я хочу добавить еще несколько свойств во время инициализации ...
Решение Вопроса

Такие атрибуты, как & quot; Электронная почта & quot; или & quot; Телефон & quot; это всего лишь несколько дополнительных пар ключа и значения. Вы могли бы использовать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", "[email protected]");
instance.AddAttribute("Phone", "555-1234");
 Srecko21 июн. 2012 г., 11:25
Спасибо. Я тоже попробую ...
 21 июн. 2012 г., 11:28
@Joksimovic С помощью словаря вы также можете проверить, существуют ли ключи проще, например,someDictionary.ContainsKey("Email")
 21 июн. 2012 г., 11:15
@Joksimovic Если вы уверены, что вам нужно добавить свойство только один раз, тогдаDictionary<string, string> было бы хорошим выбором тоже.
 Srecko21 июн. 2012 г., 10:54
Я думаю, что это должно работать. На самом деле, мне нужно добавить свойство только один раз. Я должен попробовать ...
 Srecko21 июн. 2012 г., 11:32
Да это правда. Я думаю, что словарь должен делать эту работу. Я собираюсь попробовать это через несколько минут ...

Ваш ответ на вопрос