如何创建类型列表<t1,t2 =“”>其中T1&amp; T2可以包含多种类型?</t1,>

时间:2014-01-03 01:16:11

标签: c# task-parallel-library tpl-dataflow

此问题涉及任务并行库DataFlow。

考虑这个陈述:

var sampleBlock = new TransformBlock<XDocument, string>
    (xml => TransformXmlToString.Transform(xml));

我想维护一个TransformBlock列表,但是Func转换参数(TransformXmlToString.Transform(xml))让我陷入困境。我可以通过以下伪代码说明我想要的内容:

var listOfTransformBlocks = new List<TransformBlock>
{
    new TransformBlock<T1, T2>(t1 => SomeTransformClass.SomeMethod),
    new TransformBlock<T2, T3>(t2 => SomeOtherTransformClass.SomeMethod),
    new TransformBlock<T3, T4>(t3 => YetOtherTransformClass.SomeMethod)
};

如何以能够检索,链接和使用的方式维护TransformBlock列表的能力(我也希望ActionBlock也有类似的东西)

1 个答案:

答案 0 :(得分:2)

您不能拥有不相关类型的项目列表(请注意,如果class F<T>{} Foo<One>Foo<Other>彼此无关,因为没有共同的父级。

由于IDataflowBlock只是您的类型的共享基类/接口,您必须这样做:

var listOfTransformBlocks = new List<IDataflowBlock> {...}

不幸的是,您将失去编译时查找转换类型的能力,并且必须编写一些运行时代码才能找回它们。