Why doesn't C# support implied generic types on class constructors?如果编译器可以推断出C#,则不需要您指定通用类型参数,例如:
这对于匿名类型是必需的,因为您不知道类型参数是什么(在智能感知中,它显示为 类级别的类型参数不允许您执行以下操作:
为什么C#不支持此类的类通用类型推断? 实际上,您的问题还不错。过去几年,我一直在使用通用编程语言,尽管我从来没有真正去开发它(并且可能永远也不会),但我已经对通用类型推论进行了很多思考,我的首要任务之一是始终允许在不必指定泛型的情况下构造类。 C#根本没有一套规则来实现这一目标。我认为开发人员从未想到将其包括在内的必要性。实际上,以下代码将非常接近您的主张并解决问题。所有C#需求都是一种附加的语法支持。
由于该代码实际上有效,因此我们证明了问题不只是语义之一,而仅仅是缺乏支持之一。我想我必须收回以前的帖子。 ;-)
因为它们通常是模棱两可的。相比之下,对于函数调用,类型推断是微不足道的(如果所有类型都出现在参数中)。但是,对于构造函数调用(为便于讨论,使用通用函数),编译器必须同时解析多个级别。一个级别是类级别,另一个级别是构造函数参数级别。我相信解决这个问题在算法上并不简单。凭直觉,我想说它甚至是NP完整的。 为了说明无法解决的极端情况,请想象以下类,并告诉我编译器应该做什么:
感谢Konrad,这是一个不错的答复(+1),但只是在此基础上进行扩展。 假设C#具有显式的构造函数:
您完全正确,无法推断出第一个构造函数。 现在回到课上
当然,如果我重新添加构造函数(及其替代类型),则会产生一个模棱两可的调用-就像无法解决常规方法重载一样。 |