匿名类型集合?

问题描述 投票:7回答:7

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

[有几种方法-this一个线程,而this线程的大多数答案都假定可以在一个语句中构造整个匿名集合。

由于匿名类型通常用于替换用于存储临时类的类(如this SO answer中所述,因此,我想避免像this post所建议的那样为匿名集合创建和使用一个类。] >

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

我考虑过的其他方法:

  1. 使用对象[]或ArrayList(失去了匿名类型的好处)
  2. 为必需的项目创建包装器类(消除了对匿名类型的需要)
  3. 这是我代码中唯一需要这样的集合的地方-最好的方法是什么?

其他信息:

[我正在使用旧的.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()对它们进行排序-很难看,但是它可以工作...并且比现有代码更好。

我正在寻找创建匿名类型集合的最佳实践。有几种方法-此线程上的一个和大多数答案都假定整个匿名集合...

.net collections anonymous-types
7个回答
6
投票

对于一个非常不同的答案... LINQ?


23
投票

如果对数组满意,可以使用数组初始化程序:


4
投票

一个选项是使用示例项通过通用类型推断来创建集合,例如:


1
投票
LINQ是必经之路。假设您要获取集合项中每个项目的相关对象A,B和C,并按相关对象A进行排序,则操作如下。

1
投票
我在寻找一种创建临时对象的临时列表的方法时偶然发现了这个问题。我为什么要创造这样的东西?我一直在寻找一种快速的方法来返回由另一个对象的某些值组成的对象列表的JSON。这就是我的意思。

0
投票
这一和对此的大多数答案线程假设整个匿名集合可以构造成一个声明。

0
投票
您可以这样创建收藏夹
© www.soinside.com 2019 - 2024. All rights reserved.