0

2 つの配列 IEnumerable リストを連結しようとしていますが、結果ビューにはThe underlying array is null.

IEnumerable<ObjectToConcat> result = new ArraySegment<ObjectToConcat>();

var listA = new List<ObjectToConcat>();

var a = new ObjectToConcat 
{OfficialId = Guid.NewGuid(), FirstName = "A Object"};
listA.Add(a);

var b = new ObjectToConcat 
{OfficialId = Guid.NewGuid(), FirstName = "B Object"};
listA.Add(b);

// Error here is result view
result = result.Concat(listA);

var c = new ObjectToConcat 
{OfficialId = Guid.NewGuid(), FirstName = "C Object"};
listB.Add(c);

// Error here is result view
result = result.Concat(listB);

誰でも私のコードの何が問題なのか教えてください。またはConcat動作しませんListか?

4

3 に答える 3

3

このコードは次のようになります。

IEnumerable<ObjectToConcat> result = new ArraySegment<ObjectToConcat>();

空の列挙可能にする試みです。次のように書くことで、これをより効果的かつ明確に行うことができます。

IEnumerable<ObjectToConcat> result = Enumerable.Empty<ObjectToConcat>();

とはいえ、多くのサブリストがある場合、多くの呼び出しをチェーンすることは、Concatおそらく最も効果的ではなく、パフォーマンス面でも優れています。List<IEnumerable<ObjecToConcat>> allListsを作成し、すべてのサブリストをそのリストに追加し、最後に次のように書くと、おそらくパフォーマンスが少し向上します。

result = allLists.SelectMany(x => x);

アイテムのリストだけにフラット化します。

于 2013-10-07T14:34:20.973 に答える