什么是“嘟m打字?”

我已经看过几次提到“mumble typing”,比如这个StackOverflow回答: 未来版本的.NET会支持C#中的元组吗?

我用Google搜索了这个术语,除了一些希望C#最终会支持它的人之外,我找不到多少解释方法。

什么是嘟m打字?

我不知道C#设计团队中是否有人想出这个术语,或者是否在业内其他地方使用过。 我们在C#3.0中处理隐式类型的局部变量(即“var x = whatever;”)时开始使用它。 一个相当常见的情况是希望编译器推断出部分类型,但要明确另一部分。 例如,请考虑以下事项:

var list = new List() { 10, 20, 30 }; 

这里没有给出“list”的类型,但是给出了generics列表的类型参数。 人们想象这可以从初始化器推断:

 var list = new List() { 10, 20, 30 }; 

这里??? 意味着“这里有一个类型参数;编译器,从上下文中找出它必须具有的内容”。

我们将此称为“嘟”式打字,因为有人会将读取的代码视为“var list等于用ten,20,30初始化的hrmhmrhrm的新列表”。

我们从未实现过mumble类型,这有点不幸,因为它意味着很难列出匿名类型。 为此,您可以使用“ 逐个演示 ”技巧。

我喜欢这个链接 ,其中的解释接近页面的末尾。 基本上,我的理解是“mumble typing”的概念是类型推断,而不必指定整个类型。 现在,C#4.0确实有匿名类型,但是有一些限制,其中一些在上面的链接和这里有解释。

我认为C#中的主要问题仍然是,当你需要命名一个类型,但是你只有一个匿名类型时,没有语法允许你指定你需要的东西。 例如,这不起作用:

 List myList = SomeFunctionThatReturnsThisList(someParameter); var afterTransformation = myList.Select(o => new { x = ox, y = oy }); 

您不能将var指定为generics中的类型。 这是一个有点愚蠢的例子,但我希望它传达的观点是存在具有匿名类型的语法结构,看起来它们应该是可能但不是。