Есть ли способ заставить функцию возвращать универсальное действие с переменным числом параметров? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть сценарий, в котором лучшее решение, как мне кажется, состоит в том, чтобы определенная область моего кода определяла возможные варианты поведения и возвращала соответствующую часть остальному коду, основываясь на определенных условиях.

Что-то вроде:

Action<int> foo = (int a) => a + 1;
Action<int, string> bar = (int a, string b) => b + " : " + a;

private Action GetTheRightAction(bool condition)
{
  if (condition)
     return foo;
  else
    return bar;
}

Реальный код, очевидно, более сложный, и foo и bar имеют более близкие отношения в поведении друг к другу.Общая идея сохраняется, хотя.Есть ли способ для GetTheRightAction иметь общий тип возвращаемого значения?

1 Ответ

0 голосов
/ 04 июля 2019

Хотя я ценю комментарии о потенциальных подводных камнях этого подхода, я верю, что это правильное решение для этой конкретной проблемы.

Для общего ознакомления я смог заставить это работать с кодом, подобным тому, что показан ниже.

public delegate void MyFunction(params object[] arguments);
MyFunction foo = (object[] arguments) => // check for arguments length and types here to direct the appropriate behaviour
MyFunc GetTheRightAction(bool condition) => // return between different MyFunc implementations as needed

Не так чист, как я надеялся, но это помогает.

...