匿名类型集合?

2023-11-21

我正在寻找创建由匿名类型组成的集合的最佳实践。

有几种方法——this一个也是最多的答案this线程假设可以在一条语句中构造整个匿名集合。

由于匿名类型通常用于替换用于存储临时的类(如中提出的)这个答案),我想避免创建和使用匿名集合的类,因为这个帖子建议。

就我而言,我正在迭代一个集合 - 对于集合中的每个项目,我希望以匿名类型收集相关对象(充当元组)。我需要将这些匿名类型放入一个集合中,然后对它们进行排序以进行进一步的工作。

我考虑过的其他方法:

  1. 使用 object[] 或 ArrayList(失去匿名类型的好处)
  2. 为所需项目创建包装类(消除对匿名类型的需要)

这是我的代码中唯一需要这样一个集合的地方 - 最好的方法是什么?

附加信息:

我正在使用旧版 .Net 1.1 对象,因此我正在使用的集合是实现 IEnumerable 的强类型集合,因此大多数 Linq 扩展方法(例如 .Select)将不起作用:

代码示例

foreach (Item item in myItems)
{
    foreach (Confirmation confirmation in item.GetConfirmations(true))
    {
        if (lastParentId != item.ParentId)
        {
            lastParentId = item.ParentId;
            parentObject = new ParentItem(lastParentId);
        }

        itemHolder = new ArrayList { item, confirmation };
        if (parentObject!= null)
        {
            itemHolder.Add(parentObject.Rate);
        }

        sortConfirmations.Add(confirmation.Date, itemHolder);
    }
}

// Use sortConfirmations

解决

我最终使用通用字典将相关项目收集在一起,并使用 .OrderBy() 对它们进行排序 - 丑陋,但它有效......并且比现有代码更好。


如果您对数组感到满意,可以使用数组初始值设定项:

var items = new[] {
    new { Foo = "def" },
    new { Foo = "ghi" },
    new { Foo = "jkl" }
};

然后你可以打电话ToList()如果你想得到一个List<T>出去。 Marc 的解决方案将比调用稍微高效一些ToList()由于不需要额外的复印,但我think在大多数情况下,我可能会使用“数组然后 ToList()”解决方案,因为这样不会那么混乱。当然,如果性能对于那段代码至关重要,那么事情就会改变。

编辑:当您迭代集合时,只需使用Select:

var anonymousItems = items.Select (item => new { Foo=item.Foo, 
                                                 Bar=item.Other })
                          .ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匿名类型集合? 的相关文章

  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • 重写某些 .Net Framework 控件的绘制以更改其边框颜色?

    SCENARIO 我正在使用第三方 Windows 视觉主题 当我看到我的应用程序时 它看起来像这样 但是当我使用正常的Aero主题 它看起来到处都有可怕的白色边框 QUESTION 我知道应用程序中使用的配色方案取决于视觉风格 但是 我可
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • WeakHashMap 和强引用值

    Javadocs 说 当一个密钥被丢弃时 它的条目是有效地从地图上删除 但除非有另一个线程偶尔删除这样的Map Entry条目 值对象不会被映射强引用吗 但由于没有这样的线程运行 只有get方法调用可以删除此类条目 一次一个 我几乎总是使用
  • 确定最接近的已知颜色

    我允许我的应用程序的用户选择自定义颜色 并希望有一种方法来显示每种颜色的友好名称 而不是显示十六进制代码的文本表示形式 我如何找到最近的System Drawing Color对于给定的十六进制代码 希望这对某人有帮助 Public Fun
  • ASP.NET MVC ActionFilterAttribute 在模型绑定之前注入值

    我想创建一个自定义操作过滤器属性 该属性在模型绑定期间可访问的 HttpContext 项中添加一个值 我尝试将其添加到 OnActionExecuting 中 但似乎模型绑定是在过滤器之前执行的 你知道我该怎么做吗 也许模型绑定器中有一个
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 在 C# 中读取/写入大型 XML 文件

    我正在开发一个带有 XML 数据库的应用程序 我有很大的 XML 文件 我必须在其中读取和写入数据 问题是我不想将整个 XML 文件加载到内存中 也不想因为性能问题而循环遍历整个文件 因为如果我将整个文件加载到内存中 这将影响应用程序性能
  • 空 catch 与 try-catch 语句中的“catch Exception”相同吗?

    try catch Exception 我可以写吗 try catch 这在 C NET 3 5 中可以吗 代码看起来更好 但我不知道是否相同 他们是not一样的 catch Exception 将仅捕获托管异常 catch 也会捕获非 C
  • 忽略正则表达式匹配的空格

    我需要匹配 8 个或更多数字 其序列可以包含空格 例如 以下所有内容都是有效匹配 12345678 1 2345678 12 3 45678 1234 5678 12 34567 8 1 2 3 4 5 6 7 8 此刻我有 d 8 但这只
  • 有条件地忽略属性序列化

    我有一个 Asp Net WebApi 项目 我想返回 Json 格式的产品列表和一个特定产品 这是我的产品型号 public class Product public int Id get set public string ShortS
  • 如何将位写入文件?

    如何使用 c net 将位 而不是字节 写入文件 我很坚持它 Edit 我正在寻找一种不同的方法 将每 8 位写为一个字节 一次可以写入的最小数据量是一个字节 如果您需要写入单独的位值 例如 二进制格式需要 1 位标志 3 位整数和 4 位
  • 什么是 .NET 程序集?

    什么是 NET 程序集 我浏览了网络 但无法理解其定义 程序集是 net 应用程序的最小部署单元 它可以是一个dll or an exe 它主要有两种类型 私人集会 dll 或 exe 是一个应用程序的专有财产 一般存放在应用程序根文件夹中
  • 如何将 dll 中包含的组件嵌入到 exe 中,以便它可以从内存运行?

    我正在尝试制作一个必须从内存运行的程序 通过Assembly Load bin 如上所述here http www codeproject com Articles 13897 Load an EXE File and Run It fro
  • 将“C# 友好类型”名称转换为实际类型:“int” => typeof(int)

    我想得到一个System Type给定一个string指定 原始 类型C 友好名称 基本上与 C 编译器读取 C 源代码时的方式相同 我觉得描述我所追求的最好方式是单元测试的形式 我希望存在一种通用技术 可以使以下所有断言通过 而不是尝试对

随机推荐

  • C# Virtual 和 Override 的内部工作原理

    C 虚拟和重写机制如何在内部工作的话题已经在程序员中讨论得死去活来了 但是在谷歌上半小时后 我找不到以下问题的答案 见下文 使用简单的代码 public class BaseClass public virtual SayNo return
  • Python PILLOW 的点线或短划线

    如何使用 Python PILLOW 绘制点划线或虚线或矩形 谁能帮我 使用 openCV 我可以做到这一点 但我想用 Pillow 来实现 感谢 martineau的评论 我弄清楚了如何绘制虚线 这是我的代码 cur x 0 cur y
  • PresentModalViewController 不工作

    这是我的代码 ViewController vc ViewController alloc initWithNibName TableView bundle nil self navigationController presentModa
  • 自动上传 ProGuard 映射文件到播放控制台

    每次我需要构建新版本的 apk 时 将 ProGuard 映射文件上传到 google play 控制台是非常烦人的 我的 gradle 构建为每个版本生成 4 个不同的 apk 所以我确实需要上传 4 个不同的映射文件 我想知道是否可以自
  • 如何使用 telethon 在 telegram 中搜索群组和频道?

    I use telethon用于使用 python 脚本向 telegram 发送消息 我在电视马拉松中没有找到任何东西来搜索我喜欢用来在电报应用程序上搜索的群组和频道 请看图片 我如何使用电视马拉松获得这样的列表 使用您的秘密创建文件 c
  • 为什么无论我做什么都无法更改复选框颜色? [复制]

    这个问题在这里已经有答案了 我尝试设置复选框背景颜色的样式 但它不会改变我所做的任何事情 我使用的是最新的 Firefox 29 css 或浏览器中是否有一些规则更改 CSS input type checkbox background 9
  • gradle 在父任务中使用在子任务中定义的变量

    我有一个多项目 gradle 构建 我在父构建中声明一个任务 该任务使用在子项目中声明的变量 该值可以根据子项目而变化 但是 我在配置阶段收到错误 该变量不存在 我的设置看起来像 build gradle 顶层 subprojects my
  • 如何在 React 组件中使用 switch 语句?

    我有一个 React 组件 在里面render组件的方法我有这样的东西 render return div div removed for brevity div switch div removed for brevity div div
  • 完全删除 Android Studio、Eclipse 以及随它们一起安装的所有库/包

    我在 gradle 和 sdk 管理器方面遇到了一些错误 所以我想重新安装 android studio 如何完全删除 Android Studio Eclipse 以及随它们一起安装的所有库 包 在 Windows 中 您还需要启用隐藏文
  • PHPMailer SMTP 错误:无法连接到服务器

  • ListView 行内的 ViewPager 阻止 onItemClick 被触发

    我在 ListView 的每一行中都有一个 ViewPager 它工作正常 当用户使用滑动手势时 它会更改其中的视图 但它会阻止调用 ListView 的 onItemClick 方法 我知道 ViewPager 是罪魁祸首 因为当我隐藏它
  • CodeMirror textarea.getAttribute is not a function error in mvc3 应用程序

    我在 ASP NET MVC 3 应用程序中使用 CodeMirror CodeMirror 版本已更新 2 34 my textarea看起来像这样 Html TextAreaFieldFor s gt s Data CodeBehind
  • 垃圾收集器是否调用Dispose()? [复制]

    这个问题在这里已经有答案了 我认为如果您的程序没有调用 Dispose GC 最终会调用 Dispose 但您应该在程序中调用 Dispose 只是为了使清理具有确定性 然而 从我的小测试程序来看 我根本没有看到 Dispose 被调用 p
  • 了解 kms 政策?

    我有一个名为 group dev 的 IAM 组 并且有几个用户附加到该组 我有自定义 IAM 策略 如下 仅此 IAM 策略是否足以让该组中的用户加密和列出 kms 密钥 基本上我的目标是创建 IAM 组 并将策略附加到几个用户 当添加新
  • std::list 的部分排序

    我有一个链接列表 我想对其中的一部分进行排序 例如 std sort someIterator otherIterator predicate std sort 需要随机访问迭代器 因此这种方法不起作用 有一个专门化 std list so
  • 如何对可选属性的子级使用索引访问类型?

    假设我有这样的类型 type Person firstName string lastName string contact type string value string 如果我想要一个元素的类型contact数组 我可以使用索引访问类
  • OpenJDK 11 java.lang.ClassCastException:类 sun.font.CompositeFont 无法转换为类 sun.font.PhysicalFont

    我在 Linux 上使用 openJDK 11 运行 junit 测试并收到以下错误 java lang ClassCastException class sun font CompositeFont cannot be cast to c
  • 单行注释的正则表达式

    我正在尝试制作一个正则表达式来识别评论 它必须开始于 并以新行或结束 图案 现在 我设法得到这个 n r 但我没有成功添加 图案 有小费吗 试试这样 n r n r Matches 字符串的开头 匹配两个正斜杠 n r 不匹配换行符或回车符
  • 是什么原因导致出现“注意:未初始化的字符串偏移量”? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我有一个用户填写的表单 表单上有多个相同的字段 例如
  • 匿名类型集合?

    我正在寻找创建由匿名类型组成的集合的最佳实践 有几种方法 this一个也是最多的答案this线程假设可以在一条语句中构造整个匿名集合 由于匿名类型通常用于替换用于存储临时的类 如中提出的 这个答案 我想避免创建和使用匿名集合的类 因为这个帖