这个问题在这里已经有了答案:




9年前关闭。






我有以下方法,我需要对传递给它的 iList 对象进行排序(在此方法中)。我试过 linq 但由于它是一个接口(interface),我遇到了错误。

提前致谢

private void AddListToTree(ComponentArt.Web.UI.TreeView treeView, IList list)
{
//NEED TO SORT THE LIST HERE
}

请注意,我的类型是动态的。

我想我应该创建一个临时集合,如果从我的 IList 实例填充,对其进行排序,获取支持 IList 的对象的适当实例并使用它而不是我应该保持不变的 IList 的未排序实例。
所以我尝试获取如下类型:
Type[] listTypes = list.GetType().GetGenericArguments();
Type listType = null;
if (listTypes.Length > 0)
{
listType = listTypes[0];
}

但我无法使用这种类型创建新列表

最佳答案

您应该使用 IList 的通用形式才能使用 LINQ 扩展方法:

private void AddListToTree<T>(ComponentArt.Web.UI.TreeView treeView,
                              IList<T> list)
{
    var orderedList = list.OrderBy(t => t);
    // ...
}

如果您无法修改方法的签名,但您知道 IList 中对象的类型,则可以使用 Cast :
private void AddListToTree(ComponentArt.Web.UI.TreeView treeView,
                           IList list)
{
    var orderedList = list.Cast<SomeType>().OrderBy(x => x);
    // ...
}

10-07 18:57
查看更多