我见过几次提到“混淆打字”,比如这个StackOverflow答案:Will a future version of .NET support tuples in C#?
我用Google搜索了这个词,除了一些希望C#最终会支持它的人之外,我找不到任何解释方式。
什么是嘟m打字?
答案 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
指定为通用类型。这是一个有点愚蠢的例子,但我希望它传达的观点是,有匿名类型的语法结构似乎应该是可能但不是。