来自多参数方法的静态类型多值结果

时间:2013-06-06 08:48:50

标签: c# arguments type-safety

我正在尝试在C#中完成以下操作。但是,为简洁起见,我使用函数/ Haskell样式的伪代码来说明我的观点。

想象一个函数exec,它接受​​任意数量的参数。每个参数都是一个不带参数的委托,并产生一些结果:() => Texec执行所有提供的函数,并以多个结果返回结果。

var results = exec(func1, func2, ..., funcN);
//results will be (res1, res2, ..., resN)

如果我想用process处理结果,我怎么能确定它在运行时不会失败,因为process的输入类型与结果倍数之间有些不匹配?< / p>

var process = results@(_, res2, ..., _) => res2;
//this must be typesafe, IFF this compiles:
var finalResult = process(results);

我该怎么做?

一些额外的想法:
我可以想象仿制药可能会有所帮助,但我不确定如何。 以此为例以下代码:

var results = exec<T:ArgToResultTuple>(func1, func2, ...) // OR
var results = exec<T:ArgToResultTuple>(func[]{func1, func2, ...})

这种方法可以比普通的重载更具扩展性,因为如果我想容纳不同数量的args / results,我只需要创建一个新的ArgToResultTuple子类。

另一种方法是构建像功能列表这样的结构,但这对最终用户来说不方便:

var results = exec(func1, exec(func2, func3));
var process = results@(_, (res2, _)) => res2
//will this be typesafe?:
var finalResult = process(results);

0 个答案:

没有答案