同じオブジェクトの任意の数のインスタンスを持つリストを作成する最良の方法は何ですか? つまり、次のことを行うためのよりコンパクトまたは効率的な方法はありますか?
static List<MyObj> MyObjs = Enumerable.Range(0, 100)
.Select(i => new MyObj())
.ToList();
(Enumerable.Repeat
同じオブジェクトへの 10 個の参照が得られるので、うまくいかないと思います。)
この方法が機能しないことを反映するように編集されました。
についてのあなたのコメントが気Enumerable.Repeat
になったので、試してみました。
//do not use!
List<object> myList = Enumerable.Repeat(new object(), 100).ToList();
言及されたOPのように、それらがすべて同じ参照を共有していることを確認しました。
これをイテレータとして実装するのは難しくありません。
IEnumerable<T> CreateItems<T> (int count) where T : new() {
return CreateItems(count, () => new T());
}
IEnumerable<T> CreateItems<T> (int count, Func<T> creator) {
for (int i = 0; i < count; i++) {
yield return creator();
}
}
どうやら、答えは「いいえ」です。みんな、ありがとう!