此问题涉及任务并行库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
也有类似的东西)
答案 0 :(得分:2)
您不能拥有不相关类型的项目列表(请注意,如果class F<T>{}
Foo<One>
且Foo<Other>
彼此无关,因为没有共同的父级。
由于IDataflowBlock
只是您的类型的共享基类/接口,您必须这样做:
var listOfTransformBlocks = new List<IDataflowBlock> {...}
不幸的是,您将失去编译时查找转换类型的能力,并且必须编写一些运行时代码才能找回它们。