Просто добавим: анонимные типы преобразуются компилятором в реальный объект. Таким образом, код будет изменен на что-то эквивалентное этому (НАМНОГО упрощено, только чтобы показать, что компилятор создаст реальный класс):
internal sealed class AnonymousClass1
{
internal string Text { get; set; }
internal int Count { get; set; }
internal string Link { get; set; }
}
И ваш код будет изменен на:
obj.DataSource = new AnonymousClass1[]
{
new AnonymousClass1 {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
new AnonymousClass1 {Text = "IIS 7", Count = 11, Link="http://iis.net" },
new AnonymousClass1 {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
new AnonymousClass1 {Text = "C#", Count = 13, Link="/Tags/C#" },
new AnonymousClass1 {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};
В одной из моих программ у меня есть такой код (упрощенно!):
var myObjects = new []{
new { Id = Guid.NewGuid(), Title = "Some Title", Description = string.Empty },
new { Id = Guid.NewGuid(), Title = "Another Title", Description = string.Empty },
new { Id = Guid.NewGuid(), Title = "Number 3", Description = "Better than No2, but not much" }
}
foreach(var myObject in myObjects) {
DoSomeThingWith(myObject.Title);
}
Это работает, потому что это просто еще один класс (я даже получаю IntelliSense) за кулисами. Преимущество состоит в том, что я просто спас себя от создания класса для этого объекта. В моем примере все объекты должны выглядеть одинаково. (Очевидно, что делать это для любых открытых членов было бы плохой идеей, так как компилятор может изменить имя анонимного класса, если вы добавите / удалите его)