这只是一个好奇心,是否有一个基本的事情可以阻止这样的事情(或者纠正我,如果已经有某种方法):
public TTo Convert<TTo, TFrom>(TFrom from)
{
...
}
像这样调用:
SomeType someType = converter.Convert(someOtherType);
因为如果你这样做会发生什么?
static void M(int x){}
static void M(double x){}
static T N<T>() {}
...
M(N());
现在T是什么?整数还是双精度?
当您知道要分配给什么类型时,解决问题就很容易了is,但很多时候您分配给的类型是您首先要弄清楚的事情.
从内到外的推理已经够难的了。从外到内的推理要困难得多,并且同时做这两件事是极其困难的。如果这对于compiler要了解发生了什么,想象一下当可以进行推断时,人类尝试阅读、理解和调试代码有多么困难from and to表达式上下文的类型。这种推理使得程序harder去理解,不easier,因此将其添加到 C# 中并不是一个好主意。
现在,也就是说,C#does使用 lambda 表达式支持此功能。当遇到重载解析问题时,其中 lambda 可以绑定两个、三个或一百万不同的方式,我们以两种、三种或一百万种不同的方式绑定它,然后评估这百万种不同的可能绑定,以确定哪一种是“最好的”。这使得重载解析在 C# 中至少是 NP-HARD,我花了一年的时间才实现。我们愿意进行这项投资,因为 (1) lambda 非常棒,并且 (2) 大多数时候人们编写的程序可以在合理的时间内进行分析并且可以被人类理解。所以这个成本是值得的。但总的来说,这种高级分析是不值得付出代价的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)