从方法接收匿名类型,在编译时知道其成员
本文关键字:编译 成员 方法 类型 | 更新日期: 2023-09-27 18:16:28
我知道有很多关于c#匿名类型的问题,但是没有一个能回答我。我也知道你可以返回匿名类型,要么将方法的结果赋值给一个dynamic
对象,要么像Jon Skeet在这篇文章中所说的那样对它进行强制转换,但在这两种情况下,你都需要知道哪些是匿名对象的成员,所以为什么我们不能有一种名为anonymous
的关键字,它允许我们做这样的事情:
anonymous F()
{
...
return new { a = 5, b = "some string" };
}
,然后像这样使用:
anonymous a = F();
但是有静态类型?我的意思是,为什么编译器不能静态地知道哪些是匿名对象F
方法返回的成员,所以给我智能感知?
如果你不做这样的事情,你会阻止什么呢?
anonymous F()
{
if (something) return new { a = 5 };
else return new { b = 1, z = "asdf" };
}
编译器应该如何知道返回哪种类型?它是否应该在设计时限制您使用那些匿名类型不相同的错误消息?这样做值得吗?您可以在这种情况下使用dynamic
,或者在需要时创建实际的类—以使代码清晰。