オブジェクトの新しいインスタンスを作成したい IEnumerable<object>
できますか?
IEnumerable<object> a = new IEnumerable<object>();
オブジェクトの新しいインスタンスを作成したい IEnumerable<object>
できますか?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>。のようなものを使用する必要がありますList<T>。
IEnumerable<T>イテレーターを表すのではなく、反復可能なシーケンスを表すことに注意してください。IEnumerator<T>それ自体がイテレータを表します。
回答:
たとえばList<object>、を実装するのインスタンスを作成できますIEnumerable<object>。例:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>と、悪い考えであるIMOです。
追加したいことを指定したので、必要なのは単純ではなく、IEnumerable<T>少なくともICollection<T>です。私は単にList<T>このようなものを使用することをお勧めします:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
IEnumerable<object>はをList<object>実装してIEnumerable<object>いるので、予想されるすべての場所でmyListを使用できます。
(明確化前の古い回答)
IEnumerable<T>通常のインターフェイスであるため、のインスタンスを作成できません(デフォルトの実装を指定できる場合もありますが、通常はCOMでのみ使用されます)。
したがって、本当に必要なのは、インターフェースを実装するクラスをインスタンス化することです。動作は、選択したクラスによって異なります。 IEnumerable<T>
空のシーケンスを使用する場合:
IEnumerable<object> e0=Enumerable.Empty<object>();
空でない列挙可能な場合は、を実装するコレクションを使用できますIEnumerable<T>。一般的な選択肢は、配列T[]、List<T>または不変性が必要な場合ですReadOnlyCollection<T>。
IEnumerable<object> e1=new object[]{1,2,3};
IEnumerable<object> e2=new List<object>(){1,2,3};
IEnumerable<object> e3=new ReadOnlyCollection(new object[]{1,2,3});
もう1つの一般的な実装方法IEnumerable<T>は、C#3で導入されたイテレーター機能です。
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
別の解決策は、を使用することEmptyです。
IEnumerable<object> a = Enumerable.Empty<object>();
それについてSOにスレッドがあります:IEnumerableを初期化するために新しいリストではなくEnumerable.Empty()を使用する方が良いですか?
いいえ、それIEnumerableはインターフェースなのでできません。
を実装するほとんどの非インターフェースタイプの空のインスタンスを作成できるはずですIEnumerable。
IEnumerable<object> a = new object[] { };
または
IEnumerable<object> a = new List<object>();
いいえ、できません。代わりに次のコード行を使用してください。
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
お役に立てば幸いです。
IEnumerableはインターフェイスではありません。インターフェイスのインスタンスを作成できません
あなたはこのようなことをすることができます
IEnumerable<object> a = new object[0];
new SomeComInterface()、インターフェイス自体をインスタンス化するのではなく、インターフェイスに関連付けられた「CoClass」をインスタンス化すると言う方が正確ではありませんか?
new、特定の状況でインターフェースを使用できることです。