有几种方法-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()进行排序 - 这很丑陋,但它能够工作...而且比现有的代码更好。