IList<Items> items = GetItems();
そのコレクションをコレクションに変換したいコレクションがあるとしましょうMyDbSet<Items>
MyDbSet は次のように宣言されています。public class MyDbSet<T> : IDbSet<T> where T : class
より少ないコードでそれを行うにはどうすればよいですか?おそらくlinqを使用する方がよいでしょうか?
サポートするコレクション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);
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();