这是我的设置。
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总是为null。 itemList的Count为7.我进行了三次检查,并且itemList实例中的所有项都设置了优先级。
我做错了什么?
我也试过......
ItemList newItemList = itemList
.OrderBy(item => item.Priority)
.ToList() as ItemList;
似乎没有任何效果。
提前致谢!
答案 0 :(得分: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();
答案 1 :(得分:2)
OrderBy或ToList都没有返回ItemList,因此当Joseph指出时,转换返回null。
当您从List<T>
类继承时,您可以使用Sort方法对其进行排序:
ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
答案 2 :(得分:0)
我认为您的问题是“as ItemList”。
答案 3 :(得分:0)
LINQ运算符不能在newItemList对象上就地工作。他们创建并返回新对象。如果要进行就地排序,则应使用List&lt;&gt;的Sort()方法。