Возможно ли создать словарь делегатов, возвращающих List? Пожалуйста, подскажите:
Есть обобщенный классclass MyClass where T : class
Есть в нем делегатprivate delegate List TDelegate();
И есть словарь_dctCahceActions = new Dictionary();
_dctCahceActions.Add("x", (() => { return Method1(); }));
_dctCahceActions.Add("y", (() => { return Method2(); }));
...
Проблема в том, что Method1, Method2 и т д возвращают List разных типов.
Основная идея в том, чтобы сделать что-то вродеList res = _dctCahceActions["x"].Invoke();
Но проблема возникает еще на этапе компиляции из-за приведения. Как такое правильно решить?

21 Авг 2019 в 07:00
224 +1
0
Ответы
1

Для решения данной проблемы можно использовать необобщенный делегат, который возвращает объект типа List. Затем при вызове делегата и выполнении метода можно выполнить приведение к List внутри лямбда-выражения.

Пример:

class MyClass<T> where T : class
{
private delegate List<T> TDelegate();
private Dictionary<string, TDelegate> _dctCahceActions = new Dictionary<string, TDelegate>();
public void AddMethod(string key, Func<List<T>> method)
{
_dctCahceActions.Add(key, (() => { return method(); }));
}
public List<T> InvokeMethod(string key)
{
return _dctCahceActions[key].Invoke();
}
}
// Пример использования
MyClass<string> myClass = new MyClass<string>();
myClass.AddMethod("x", () => { return Method1(); });
myClass.AddMethod("y", () => { return Method2(); });
List<string> res = myClass.InvokeMethod("x");
List<string> Method1()
{
return new List<string>() { "method1" };
}
List<string> Method2()
{
return new List<string>() { "method2" };
}

Таким образом, вы можете использовать необобщенный делегат для возврата объекта типа List и выполнить приведение внутри лямбда-выражения при вызове метода.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир