Предположим, у меня есть класс с несколькими свойствами, которые соответствуют заданным пользователем параметрам, таким как:Нельзя ли добавить свойства в словари?
bool StepUpHedge { get; set; }
bool PullOnJump { get; set; }
bool PullOnCross { get; set; }
double MaxStockSpread { get; set; }
double MaxHedgeSpread { get; set; }
(Это только примеры, а не реальный код, и все равно, что они имеют в виду не важно.)
Теперь предположим, что на самом деле существуют десятки или даже сотен этих пользовательских параметров. Чтобы справиться с сохранением/загрузкой и (лучше всего), копировать все или некоторые из них из одного экземпляра класса в другой может быть довольно громоздким.
Очевидно, что я не хочу, чтобы просто сделать один Dictionary<Parameter, object>
хранить их все (типобезопасность? Бокс? Что это?), Но это бы хорошо быть в состоянии перечислить на них (без отражения) , который вызывает у меня удивление ...
Что делать, если я сделал несколько словарей:
public enum BoolParameter { /*...*/ }
public enum DoubleParameter { /*...*/ }
public enum IntParameter { /*...*/ }
Dictionary<BoolParameter, bool> BoolParameters { get; set; }
Dictionary<DoubleParameter, double> DoubleParameters { get; set; }
Dictionary<IntParameter, int> IntParameters { get; set; }
Я знаю, что это, кажется, очень ненадежный, и есть более чистые способы борьбы со свойствами в общей (для например, путем подклассификации их в логический g roups); но то, что я не знаю не может, кажется, обернуть мою голову вокруг, как еще обеспечить полную желаемую функциональность легко ремонтируемым способом.
Желаемая функциональность: возможность отображать все пользовательские параметры для выбранного экземпляра, выбирать, какие свойства копировать, и копировать значения только выбранных свойств из одного экземпляра в другой. Используя перечислимый интерфейс для этих свойств, это становится довольно простым - и добавление нового параметра так же просто, как добавление его в словарь. В противном случае, не используя рефлексию, я с трудом вижу это.
Давайте думать об этом, может быть, я должен использовать строго типизированный DataSet для всех этого ...
Почему без отражения? Вы можете добавить атрибуты к заданным свойствам и в сочетании с перечислить отражение на них. – Amirshk
Я согласен с тем, что Am-reflection является «медленным», но это действительно реально возникает, когда вы создаете или копируете сотни/тысячи объектов. – JustLoren