为什么匿名类型不能传递给方法?

什么是倾向于不从方法返回匿名类型的设计决策?

可以从方法返回匿名类型的实例 – 但由于您无法对其进行命名,因此无法准确声明该方法将返回的内容,因此您必须声明它只返回object 。 这意味着调用者不会对属性等进行静态类型访问 – 尽管他们仍然可以传递实例,通过reflection访问它(或者在C#4中动态输入)。

就个人而言,我非常希望C#的未来版本允许你编写一个非常简短的类声明,它生成相同的代码(不可变属性,构造函数,Equals / GetHashcode / ToString),其名称为…

一个难以理解的黑客围绕它,称为铸造示例 。 我不会推荐它。

因为匿名类型没有名称。 因此,您无法为方法声明返回类型。

因为C#是静态类型语言,并且在静态类型语言中,需要在编译时知道方法的返回类型,并且匿名类型没有名称。

如果定义仅在方法的调用中,如何在方法中使用您的类型?

这不是javascript。

很多答案似乎都表明,由于当前的语法和规则,这是不可能的。 但问题是关于改变它们。 我认为这是可能的,但有点复杂,导致一种笨拙(容易出错)的语法。 喜欢

 var f() { return new { A = "*", B = 1 }; } var x = f(); 

问题是这是否为语言增加了足够的价值以使其值得。

至少最多3.5个,匿名类型实际上是在编译时解决的,这对于匿名方法签名来说是不可能的(或很难)。