补充一点:匿名类型由编译器转换为真实对象。因此代码将被更改为与此等效的代码(非常简化,只是为了表明编译器将创建一个实际的类):
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)。好处显然是我刚刚为这个对象创建了一个类。在我的示例中,所有对象也需要看起来相同。 (显然,对任何公共成员这样做都是一个坏主意,因为如果您添加/删除一些,编译器可能会更改匿名类的名称)