C#是否支持返回类型的类型推断?如果有基本的东西阻止这样的事情(或者如果已经有某种方法,请纠正我),这只是一种好奇:publicTToConvert(TFromfrom){...}像这样调用它:SomeTypesomeType=converter.Convert(someOtherType);因为如果你这样做会发生什么?staticvoidM(intx){}staticvoidM(doublex){}staticTN(){}...M(N());现在什么是T?整数还是双?当您知道要分配给什么类型时,解决问题就很容易,但是您分配给的类型在大多数情况下就是您要解决的问题。从内到外推理是困难的。从外到内推理要难得多,而且很难同时做到这两点。如果编译器很难理解正在发生的事情,那么想象一下人们在推断表达式的上下文类型时试图阅读、理解和调试代码是多么困难。这种推理使程序更难理解,而不是更容易,因此将它添加到C#中不是一个好主意。也就是说,C#确实支持lambda表达式的这一特性。当面对一个lambda可以以两种、三种或一百万种不同方式绑定的重载解决问题时,我们将它绑定两种、三种或一百万种不同方式,然后评估那百万种不同的可能绑定以确定哪一种是“最佳”。这使得C#中的重载解析至少是NP-HARD,并且我花了一年多的时间来实现。我们愿意进行这项投资,因为(1)lambda很棒,并且(2)大多数时候人们编写的程序可以在合理的时间内进行分析并且可以被人类理解。所以这是值得的。但总的来说,这种高级分析是不值得的。C#表达式总是*具有固定的类型,而不管周围的上下文。您要求的表达式的类型取决于分配给它的内容;那将违反这一原则。*)lambda表达式、函数组和空文字除外。与Java不同,在C#中类型引用不基于返回类型。不要问我为什么,EricLippert回答了这些“为什么C#不能……”的问题:因为没有人设计、指定、实现、测试、记录和发布函数类型推断?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
