在分析一些 ASP.NET MVC 项目时,我发现匿名类型遍布各处。
HTML 助手有它们:
<%=Html.TextBox("view.Address", "address", new { Class = "text_field" })%>
许多操作的返回类型都有它们:
JsonNetResult jsonNetResult = new JsonNetResult
{
Formatting = Formatting.Indented,
Data = new {Something= “”}
}
我知道这来自 LINQ:
from p in context.Data
select new { p.Name, p.Age };
这些真的是现在在 LINQ 之外完成事情的正确方法吗?它们会损害代码的可重用性和可读性吗?
最佳答案
恕我直言,匿名类型的最大问题源于无法命名它们的类型。也就是说,不可能将匿名类型的类型明确指定为代码中的表达式。这确实让创建通用列表之类的事情变得很尴尬。
var list = New List<No way to specify an Ananymous type>();
通常你必须求助于辅助方法。
public List<T> CreateList<T>(T notUsed) {
return new List<T>();
}
var list = CreateList(new { .Class = "foo" });
这也有更大的影响,因为你不能使用匿名类型作为返回类型,使得转换非常尴尬(需要一个辅助方法)等......
但这些并不是匿名类型设计的目的。在许多方面,它们被设计为在特定定义的函数中使用,随后创建 lambda 表达式。不是作为完整功能之间的数据通信类型。这当然是设计中的一个限制,有时会让我发疯。但总的来说,我发现它们是该语言中非常有用的结构。
如果没有某种形式的它们,LINQ 的许多部分将无法实现。
关于c# - 在 LINQ 之外使用匿名类型是一件好事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/689897/