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

时间:2010-03-08 10:09:20

标签: c#

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

6 个答案:

答案 0 :(得分:6)

可以从方法中返回一个匿名类型的实例 - 但由于你无法命名它,你不能确切地声明该方法将返回什么,所以你必须声明它只返回object。这意味着调用者不会对属性等进行静态类型访问 - 尽管他们仍然可以传递实例,通过反射访问它(或在C#4中动态输入)。

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

有一个一个肮脏的黑客围绕它,称为casting by example。我不会推荐它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

这不是javascript。

答案 4 :(得分:1)

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

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

var x = f();

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

答案 5 :(得分:0)

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