2012-02-03 2 views
0

Возможно ли иметь Перечислимый Func с разными типами возвращаемых данных, я думаю, что ответ - нет, но как можно поддержать это. В настоящее время мой код выглядит так, но мне нужно иметь возможность передавать разные типы возвращаемых данных в качестве типов ввода и наоборот. Я хочу иметь структуру, в которой предыдущие действия возвращают тип, формирует вход для следующего действия.Перечислимый Func с различными типами возврата

  • действие 1 принимает и возвращает Аргументы B
  • действие 2 принимает B и возвращает C
  • действие 3 БЕРЕТ C и возвращает D

Im здание что-то из виртуальной машины, которая принимает инструкции по тестированию но я немного не уверен, как продвигаться отсюда.

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

IEnumerable<Func<Tariff, Tariff> actions = new Func<Tariff, Tariff>[] 
{ 
    a = > {CreateStandardTariff();}, //returns typeof(StandardTariff) 
    a = > {CreateTariff();}   //returns typeof(Tariff) takes StandardTariff  
}; 

Test(actions); 

...

public void Test<T>(IEnumerable<Func<T,T>> actions) where T : class 
{ 
     T current = null; 
     foreach(Func<T,T> action in actions) 
     current = action(current); 
} 

Я использую 3.5

ответ

0

Вы можете использовать динамический или объект в качестве входных и выходных типов

1

Вы могли бы реализовать общий интерфейс или абстрактный базовый класс между типами ввода и вывода. например ITariff

class Tariff : ITariff {} 
class StandardTariff : ITariff {} 

, а затем использовать:

Func<ITariff, ITariff> 
Смежные вопросы