匿名类型集合?

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(使用前将#替换为@)

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

随机推荐

  • 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线程假设可以在一条语句中构造整个匿名集合 由于匿名类型通常用于替换用于存储临时的类 如中提出的 这个答案 我想避免创建和使用匿名集合的类 因为这个帖