如何创建空的 IOrderedEnumerable<DynamicNode> 和 IEnumerable<IGrouping<string, DynamicNode>>

问题描述 投票:0回答:2

我需要一种方法来创建一个空的 IOrderedEnumerable 和 IEnumerable>

//上面的 IGrouping DynamicNode 被 stackoverflow 剥离了

原因:我创建了 3 个空列表类型(IOrdered、IGrouping、IEnumerable),然后根据一些其他信息(用户指定的选项,例如按创建日期排序或按月分组),然后调用一个函数,分配一个所述列表类型。

(简短片段)

//DOESNT WORK THIS IS THE PART I NEED
IEnumerable<DynamicNode> baseList = Enumerable.Empty<DynamicNode>();
IOrderedEnumerable<DynamicNode> orderedList =  (IOrderedEnumerable<DynamicNode>)Enumerable.Empty<DynamicNode>();
IEnumerable<IGrouping<string, DynamicNode>> groupedList = (IEnumerable<IGrouping<string, DynamicNode>>)Enumerable.Empty<DynamicNode>();
//ABOVE DOESNT WORK THIS IS THE PART I NEED

if (order)
{
    if (group)
    {
        groupedList = returnGroupedOrderedList(nodeList, ascending, useFeatured, groupBy, orderBy);
    }
    else
    {
        orderedList = returnOrderedList(nodeList, ascending, useFeatured, orderBy);
    }
}

有人知道怎么做吗?

c# razor umbraco
2个回答
26
投票

第一个应该按原样工作:

IEnumerable<DynamicNode> baseList = Enumerable.Empty<DynamicNode>();

第二个应该使用一些小技巧:

IOrderedEnumerable<DynamicNode> orderedList =
    Enumerable.Empty<DynamicNode>().OrderBy(x => 1);

第三个应该稍作改变即可工作:

IEnumerable<IGrouping<string, DynamicNode>> groupedList = 
    Enumerable.Empty<IGrouping<string, DynamicNode>>();

0
投票

您始终可以使用

Enumerable.Empty<T>
生成空的 IEnumerable。

无论您想要特定类型的 IEnumerable,还是 IEnumerable 的 IEnumerable,通用输入都将始终有效。

现在,如果您想要一个有序的枚举,那么您可以在此基础上进行构建,并对生成的空枚举进行排序,如下所示

IOrderedEnumerable<DynamicNode> orderedList = Enumerable
         .Empty<DynamicNode>()
         .OrderBy(x => 1);

更好的是,你可以使用丢弃,因为

x
并不重要

IOrderedEnumerable<DynamicNode> orderedList = Enumerable
         .Empty<DynamicNode>()
         .OrderBy(_ => 1);
© www.soinside.com 2019 - 2024. All rights reserved.