人々はあなたを助けようとしていますが、あなたは聞いていません。
どのように「作成」していますか?
IEnumerable<T>
IEnumerable を新規作成できません
この構文は失敗します
IEnumerable<Person> IPeople = new IEnumerable<Person>();
アプリケーションのロードで IEnumerable への参照を作成している可能性があります。
しかし、そのようなものがないため、IEnumerable オブジェクトを作成していません。
IEnumerable はコレクションではなくインターフェイスです。新しくすることはできません。
以下のコードを参照してください。
16 ミリ秒で IEnumerable ctor から 100,000 の ObservableCollection を作成しました。
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Diagnostics.Debug.WriteLine(iPeople.Count().ToString());
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 13 ms
sw.Restart();
ObservableCollection<Person> ocPeople = new ObservableCollection<Person>(iPeople);
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 16 ms
sw.Restart();
System.Diagnostics.Debug.WriteLine(iPeople.Count().ToString());
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 8 ms
sw.Restart();
System.Diagnostics.Debug.WriteLine(ocPeople.Count().ToString());
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 1 ms
sw.Restart();
List<Person> lPeople = new List<Person>(iPeople);
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 10 ms
sw.Restart();
ObservableCollection<Person> ocPeople2new = new ObservableCollection<Person>(lPeople);
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString()); // 6 ms
public IEnumerable<Person> iPeople
{
get
{
for (int i = 0; i < 100000; i++) yield return new Person(i);
}
}
public class Person
{
public Int32 ID { get; private set; }
public Person(Int32 id) { ID = id; }
}