我见过几次提到"mumble类型“,比如这个StackOverflow答案:Will a future version of .NET support tuples in C#?
我在谷歌上搜索了这个术语,除了一些人希望C#最终支持它之外,我找不到太多的解释。
什么是mumble打字?
发布于 2011-04-17 14:33:23
我不知道是不是C#设计团队中的某个人想出了这个词,或者这个词是否在这个行业的其他地方使用过。在C# 3.0中,我们在处理隐式类型的局部变量(即"var x= whatever;")时开始使用它。一种相当常见的情况是,希望编译器推断类型的一部分,但对另一部分显式。例如,考虑以下内容:
var list = new List<int>() { 10, 20, 30 };这里没有给出" list“的类型,但给出了泛型列表的类型参数。可以想象这可以从初始化器中推断出来:
var list = new List<???>() { 10, 20, 30 };这里?意思是“这里有一个类型参数;编译器,从上下文中找出它必须是什么”。
我们称其为"mumble类型“,因为我们可以幽默地将代码理解为"var list等于用10,20,30初始化的hrmhmrhrm的新列表”。
我们从来没有实现mumble类型,这有点不幸,因为这意味着很难创建匿名类型的列表。为此,您可以使用"cast by example“技巧。
发布于 2011-04-17 11:38:31
我喜欢this link,它的解释就在页面末尾。基本上,我的理解是,"mumble类型“的概念是类型推断,而不必指定整个类型。现在,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指定为泛型中的类型。这是一个有点愚蠢的例子,但我希望它传达了这样一个想法,即具有匿名类型的语法结构看起来应该是可能的,但实际上并非如此。
https://stackoverflow.com/questions/5693503
复制相似问题