Возможно ли создать словарь делегатов, возвращающих 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
198 +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 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир