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

2

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

public class MyClass
    {
        String Template;
        String Term;
     }

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

Srecko

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

Ваш Ответ

3   ответа
4

Такие атрибуты, как & 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");
Да это правда. Я думаю, что словарь должен делать эту работу. Я собираюсь попробовать это через несколько минут ... Srecko
@Joksimovic С помощью словаря вы также можете проверить, существуют ли ключи проще, например,someDictionary.ContainsKey("Email")
Я думаю, что это должно работать. На самом деле, мне нужно добавить свойство только один раз. Я должен попробовать ... Srecko
Спасибо. Я тоже попробую ... Srecko
@Joksimovic Если вы уверены, что вам нужно добавить свойство только один раз, тогдаDictionary<string, string> было бы хорошим выбором тоже.
1

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

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

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

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

Похожие вопросы