什么是“嘟m打字?”

时间:2011-04-17 03:13:28

标签: c# programming-languages

我见过几次提到“混淆打字”,比如这个StackOverflow答案:Will a future version of .NET support tuples in C#?

我用Google搜索了这个词,除了一些希望C#最终会支持它的人之外,我找不到任何解释方式。

什么是嘟m打字?

2 个答案:

答案 0 :(得分:21)

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

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

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

您不能将var指定为通用类型。这是一个有点愚蠢的例子,但我希望它传达的观点是,有匿名类型的语法结构似乎应该是可能但不是。