Я хочу создать список действий, которые нужно выполнить над рисованным объектом. Вот как будет выглядеть неуниверсальный код:
private Dictionary<String, Action<Drawing, String>> actions = new Dictionary<String, Action<Drawing, String>>();
private void LoadActions()
{
actions.Add("Height", (d, s) => d.Height = Double.Parse(s));
actions.Add("Width", (d, s) => d.Width = Double.Parse(s));
}
private void ProcessDrawing(Drawing drawing, String prop, String value)
{
actions[prop](drawing, value);
}
Проблема, с которой я столкнулся, заключается в том, что класс Drawing является общим (Drawing<T>
), поэтому я не могу определить действия, подобные следующим, поскольку T не определен:
Dictionary<String, Action<Drawing<T>, String>> actions = new Dictionary<String, Action<Drawing<T>, String>>();
Без кеширования код выглядит так:
private void ProcessDrawing<T>(Drawing<T> drawing, String prop, String value)
{
var actions = new Dictionary<String, Action<Drawing<T>, String>>();
actions.Add("Height", (d, s) => d.Height = Double.Parse(s));
actions.Add("Width", (d, s) => d.Width = Double.Parse(s));
actions[prop](drawing, value);
}
Так, как я могу кэшировать кучу действий, принимающих универсальный тип параметра?
Спасибо