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

C# 如何简单地将一种类型的集合转换为另一种类型的集合,c#,.net,C#,.net,假设我有collectionIList items=GetItems() 我想将该集合转换为MyDbSet MyDbSet声明如下:公共类MyDbSet:IDbSet其中T:class 如何在代码量较少的情况下做到这一点,可能最好使用linq?对于支持ICollection的集合。添加您可以编写如下帮助器方法: public static TCollection CreateCollection<TCollection,TElement>(IEnumerable<TElemen

假设我有collection
IList items=GetItems()
我想将该集合转换为
MyDbSet

MyDbSet声明如下:
公共类MyDbSet:IDbSet其中T:class


如何在代码量较少的情况下做到这一点,可能最好使用linq?

对于支持
ICollection的集合。添加
您可以编写如下帮助器方法:

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;
}

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

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;
    }
}
公共静态类MyEnumerable
{
公共静态MyDbSet-ToMyDbSet(此IEnumerable源)
T:在哪里上课
{
var collection=newmydbset();
foreach(源中的var项)
集合。添加(项目);
回收;
}
}
用法:

IList<Items> items = GetItems();

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

这取决于目标集合类型。有些人有
Add
,有些人有
AddRange
,有些人有构造函数使用
IEnumerable
,有些人使用特定的助手方法,如
ToArray()
MyDbSet
只有
Add
,没有构造函数
ICollection。Add
可能是最接近通用方法的方法,但对于不可变的集合和数组,它将失败。我不想在foreach中循环它,只想使用linqLess行在尽可能少的行中完成它!=更好的代码。您错过了
where t收集:new
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();