Since anonymous types are compiler-generated anyway, why don't they go one step further with an indexer to access the values of its properties similar to ExpandoObject, but make it statically coded.
Some background: I am currently trying to scrape up any last bit of performance I can in a microORM and one thing sticks out to me: reflection on anonymous types.
Parameters are passed in as an object which while not required to be an anonymous type typically is. I have to use reflection to get each member's name and value, because anonymous types are just compiler generated POCOs really.
After working with ExpandoObject and some of the other dynamic structures in C# I find myself missing Expando's explicit IDictionary interface implementation.
They don't have an indexer because you have the parameter passed in as the base Object reference type. It is not a reasonable assumption that you could use methods defined on an interface that is not defined in the method contract.