gen*_*per 5 c# generics type-inference
为什么C#编译器不够智能在下列情况下推断类型?
假设我有一个像这样定义的静态成员函数:
static Func<X, Z> pipe<X, Y0, Z>(Func<X, Y0> f0, Func<Y0,Z> f1) => x => f1(f0(x));
Run Code Online (Sandbox Code Playgroud)
然后,我定义了几个要测试的函数:
static double _toDouble(int x) => (double)x;
static short _toShort(double x) => (short)x;
Run Code Online (Sandbox Code Playgroud)
然后,一个人想要
var f = pipe(_toDouble, _toShort);
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,必须这样做
var f = pipe<int,double,short>(_toDouble, _toShort);
Run Code Online (Sandbox Code Playgroud)
我认为没有办法解决这个问题,但如果证明是错误的话会很好,我不明白为什么它不能推断出使用的类型.
编译器无法解决这种类型推理问题的根本原因是什么,并且可以做任何事情来使上述管道/组合"操作符"工作(具有强类型泛型,没有反射等)而没有明确提供类型参数?
如果没有那么这个管道功能(以及同一系列中的其他类似功能)是无用的并且增加了语法噪声而不是减少它.