ToListがあるなら、ToCollectionがあってもいいと思い、書いてみました。
IEnumerableExtensions.cs
using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Infrastructure { public static class IEnumerableExtensions { /// <summary> /// IEnumerable<T>からCollection<T>作成します。 /// </summary> /// <typeparam name="TCollection">生成するCollection<T>の型。</typeparam> /// <typeparam name="TSource"><paramref name="source"/>の要素の型。</typeparam> /// <param name="source">List<T>の作成元のIEnumerable<T>。</param> /// <returns>入力シーケンスの要素を含むCollection<T>。</returns> public static TCollection ToCollection<TCollection, TSource>( this IEnumerable<TSource> source) where TCollection : Collection<TSource>, new() { if (source == null) throw new ArgumentNullException(nameof(source)); TCollection collection = new TCollection(); foreach (TSource item in source) { collection.Add(item); } return collection; } } }
Program.cs
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; namespace Infrastructure { class Program { static void Main(string[] args) { IEnumerable<int> e = Enumerable.Range(1, 10); ObservableCollection<int> c = e.ToCollection<ObservableCollection<int>, int>(); foreach (int i in c) { Console.Write(i); // 12345678910 } Console.ReadKey(); } } }
intを2回指定しないといけないのが、残念ですね。