匿名类型的最佳用例是什么?
在我看来,它们仅在有限的上下文中有用,例如一个类或一个函数。它们几乎不能在这个上下文之外使用,因为没有反射没有人会知道这些类型有哪些属性可用。
匿名类型的最佳用例是什么?
在我看来,它们仅在有限的上下文中有用,例如一个类或一个函数。它们几乎不能在这个上下文之外使用,因为没有反射没有人会知道这些类型有哪些属性可用。
匿名类型仅用于非常狭窄的范围。我为他们提供的大多数用例都涉及 Linq。
var result = from x in MyCollection
select new
{
x.Prop1,
x.Prop2
};
此外,在 Linq to SQL 的情况下 - 使用匿名类型将通过仅选择匿名类型中使用的列来生成不同的 SQL。在上面的例子中(如果它是一个 Linq to SQL 查询),它会生成类似“select prop1, prop2 from mytable”的东西,而不是选择所有的字段。
我从来没有遇到过(还)我只想在我的代码中声明一个新的匿名类型的情况。我想如果还有其他的话,也许它对局部常量很有用?
var x = new
{
FirstName = "Scott",
LastName = "Ivey"
};
但是,它不会停止,例如 ASP.NET MVC 团队,您将它们用作 Hashtable 样式的参数对象......
Url.Action(new{controller="Home", action="Index"})
不过,我不鼓励这样做,因为大量使用了魔术弦。
我几乎只在 LINQ 语句中使用匿名类型,在相同的方法中您可以遍历结果集。这就是他们被介绍的原因
我发现匿名类型有用的一种情况是将对象序列化为 JSon 并在 ASP.NET MVC 操作中返回它们。您不一定要返回对象的所有属性,匿名类型可以帮助您解决这个问题。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Person(int id)
{
Person person = manager.GetPersonById(id);
if(Request.IsAjaxRequest())
return Json(new {Name=person.Name, Age=person.Age,...});
else
...
}
每当您想对某些对象运行查询然后对它们执行一些其他操作(如迭代)时,它们都很有用。
例如:
var procs = System.Diagnostics.Process.GetProcesses().Select(p => new { p.Id, p.ProcessName});
foreach(var p in procs)
{
Console.WriteLine("{0}: {1}", p.Id, p.ProcessName);
}
最近,我很幸运能够满足 DataGrids 或 DataViews 中的字段,这些字段依赖于不再返回相同数据的查询中的列。例如,有时出于各种原因对数据源进行了规范化或重命名了字段。使用返回匿名类型的 LINQ 查询作为“前端”,我们能够在生产中保持现有网格。
正确的; 它们仅在极其有限的范围内实用。