#c_sharp
Допустим есть класс
class A
{
public int Age;
public string Name;
}
Что необходимо сделать чтобы можно инициализировать поля экземпляр класса через instance["Age"] = 5;
И возможно ли такое?
Ответы
Ответ 1
Это можно сделать с помощью индексатора ([]) и рефлексии. Примерный код: public object this[string fieldName] { get { var field = this.GetType().GetField(fieldName); return field.GetValue(this); } set { var field = this.GetType().GetField(fieldName); field.SetValue(this, value); } } Данный код работает для всех экземплярных полей. Если вам надо устанавливать в т.ч. и статические поля -- нужно изменить код. Также по-хорошему нужно добавить валидацию (например, что указано имя существующего поля, или что тип устанавливаемого значения соответствует типу поля) и кэширование списка полей (чтобы запрашивать их только один раз). Хотя лучше всего таки использовать сами поля или свойства. Или заменить ваш класс на словарь, где ключом будем являться имя поля/свойства.Ответ 2
инициализировать поля экземпляр класса через instance["Age"] = 5; И возможно ли такое? Можно просто написать instance.Age = 5;. Для этого надо использовать dynamic и ExpandoObject. Пример - тут.Ответ 3
переопредилить оператор [] что то вроде этого: class a { public int age; public string name; public object this[int i] { get { return age[i]; } set { age[i] = value; } } }
Комментариев нет:
Отправить комментарий