【发布时间】:2010-10-14 06:48:09
【问题描述】:
我正在寻找创建由匿名类型组成的集合的最佳做法。
有几种方法 - this this 线程上的一个和大多数答案假设整个匿名集合可以在一个语句中构建。
由于匿名类型通常用于替换用于存储临时的类(如this SO answer 中提出的),我想避免为匿名集合创建和使用类,正如this post 建议的那样。
在我的例子中,我正在迭代一个集合 - 对于集合中的每个项目,我想以匿名类型(充当元组)收集相关对象。我需要将这些匿名类型放入一个集合中,然后对它们进行排序以供进一步工作。
我考虑过的其他方法:
- 使用 object[] 或 ArrayList(失去匿名类型的好处)
- 为所需项目创建包装类(消除对匿名类型的需求)
这是我的代码中唯一需要这样一个集合的地方 - 最好的方法是什么?
其他信息:
我正在使用旧版 .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() 对它们进行排序 - 丑陋,但它有效......并且比现有代码更好。
【问题讨论】:
-
获取信息;要将 LINQ 与较旧的集合一起使用,请使用 .Cast
(),即 myItems.Cast - () 等。
标签: .net collections anonymous-types