1

这是我的设置。

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

从 XML 文件加载读取以填充 ItemList

然后我尝试按优先级排序项目列表。这是一个int?然而,出于测试目的,所有项目都有不同的值。

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

在上面的 newItemList 中始终为空。itemList 的计数为 7。我已经检查了三次,并且 itemList 实例中的所有项目都设置了优先级。

我究竟做错了什么?

我也试过...

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

似乎没有任何工作。

提前致谢!

4

4 回答 4

7

问题是 OrderBy 不返回 ItemList,它返回一个 IOrderedEnumerable,而 ToList() 不返回 ItemList,它返回一个 List。无论哪种方式,您都试图将两者都转换为 ItemList,但它们不是,因此您得到 null。

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 
于 2009-10-23T14:39:33.353 回答
2

正如约瑟夫指出的那样,OrderBy 或 ToList 都不返回 ItemList,因此转换返回 null。

当您从List<T>类继承时,您可以使用 Sort 方法对其进行排序:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
于 2009-10-23T14:46:23.153 回答
0

我认为你的问题是“作为 ItemList”。

于 2009-10-23T14:43:45.513 回答
0

LINQ 运算符不能在您的 newItemList 对象上就地工作。他们创建并返回新对象。如果你想进行就地排序,你应该使用 List<> 的 Sort() 方法。

于 2009-10-23T14:45:01.547 回答