如何简单地将一种类型的集合转换为另一种类型的集合

时间:2013-04-13 13:39:35

标签: c# .net

假设我有收集IList<Items> items = GetItems(); 我想将该集合转换为MyDbSet<Items>

的集合

MyDbSet声明如下:public class MyDbSet<T> : IDbSet<T> where T : class

如何使用较少的代码执行此操作,可能最好使用linq?

2 个答案:

答案 0 :(得分:1)

对于支持ICollection<T>.Add的集合,您可以编写如下的辅助方法:

public static TCollection CreateCollection<TCollection,TElement>(IEnumerable<TElement> seq)
    where TCollection:ICollection<TElement>, new
{
    var coll=new TCollection();
    foreach(var element in seq)
      coll.Add(element);
    return coll;
}

使用如下:

var coll = CreateCollection<MyDbSet<T>, T>(seq);

但我个人宁愿写一个AddRange(seq)扩展方法然后使用它:

var coll = new MyDbSet<T>();
coll.AddRange(seq);

答案 1 :(得分:1)

我认为除了循环源集合并在Add类实例上调用MyDbSet之外,还有其他方法,但它可以隐藏在自定义扩展方法中:

public static class MyEnumerable
{
    public static MyDbSet<T> ToMyDbSet<T>(this IEnumerable<T> source)
        where T : class
    {
        var collection = new MyDbSet<T>();

        foreach (var item in source)
            collection.Add(item);

        return collection;
    }
}

用法:

IList<Items> items = GetItems();

MyDbSet<Items> itemsSet = items.ToMyDbSet();