什么是倾向于不从方法返回匿名类型的设计决策?
答案 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,匿名类型实际上是在编译时解决的,这对于匿名方法签名来说是不可能的(或很难)。