我看过许多有关匿名类型如何工作的介绍,但不确定它们真正有何用处。在设计良好的程序中,匿名类型可以用于解决哪些场景?
匿名类型与系统设计甚至类级别无关,它们只是开发人员编码时使用的工具。
我甚至不将匿名类型视为类型本身。我主要将它们用作方法级别的匿名元组。如果我查询数据库然后操作结果,我更愿意创建匿名类型并使用它,而不是声明一个完全不会在我的方法范围外使用或知道的全新类型。
例如:
var query = from item in database.Items
// ...
select new { Id = item.Id, Name = item.Name };
return query.ToDictionary(item => item.Id, item => item.Name);
没有人关心`a,匿名类型。它存在是为了让你不必声明另一个类。
var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);
from x in db.Table1 select new {x.Column1, Alias2=x.Column2}
将被转换为以下SQL:
SELECT Column1, Column2 AS Alias2 FROM Table1
使用匿名类型,您可以在事先不定义类型的情况下创建临时投影。编译器将为您定义类型。
与 Linq 一起使用它们。
重要的是要知道,LINQ不强制您使用匿名类型。您也可以在select之后编写普通的对象构造。
var query = from item in database.Items
// ...
select new Person(item.id, item.Name)
这可以避免您进行丑陋的反射编程。
@Wouter:
var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};
其中ID和NAME是你的Person类的真实属性。