c# - 在 LINQ 之外使用匿名类型是一件好事吗?

标签 c# .net linq

在分析一些 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/

相关文章:

c# - ASP.NET Core 2.0 读取 : Options in razor page

c# - 在更新外键字段之前释放 DataContext

.net - 引用类型

c# - 在 Entity Framework 中排除所有(启用延迟加载)

C# 处理空格

c# - 获取对撞机中的最近点

c# - 使用更新对象收集 wmi 性能计数器

.net - c# dll绑定(bind)到不同版本

c# - WPF Datagrid 显示列两次

c# - 更改全局程序集缓存 (GAC) 中的 MySql.data 版本