从方法接收匿名类型,在编译时知道其成员

本文关键字:编译 成员 方法 类型 | 更新日期: 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,或者在需要时创建实际的类—以使代码清晰。