Concat不工作 - 底层数组为null

时间:2013-10-07 14:24:28

标签: c# linq

我正在尝试Concat两个数组的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

3 个答案:

答案 0 :(得分:3)

看起来这段代码:

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

是尝试使空可枚举。您可以通过以下方式更有效,更清晰地完成此任务:

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

那就是说,如果有很多子列表,链接很多Concat次呼叫可能不是最有效的,性能明智的。如果你创建一个List<IEnumerable<ObjecToConcat>> allLists,将所有子列表添加到该列表,那么它可能会更好一点,然后最后你可以写:

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

将其展平为一个项目列表。

答案 1 :(得分:1)

您可以在下方添加ObjectToConcat列表,并使用addrange方法

为其添加项目
List<ObjectToConcat> result = new List<ObjectToConcat>();

result.AddRange(listA);

答案 2 :(得分:0)

试试这个:

IEnumerable<ObjectToConcat> result = 
       new ArraySegment<ObjectToConcat>(new ObjectToConcat[0]).Array;