这是我的设置。

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;

似乎没有任何效果。

提前致谢!

有帮助吗?

解决方案

OrderBy或ToList都没有返回ItemList,因此当Joseph指出时,转换返回null。

当您继承 List&lt; T&gt; 类时,您可以使用Sort方法对其进行排序:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;

其他提示

问题是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(); 

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

LINQ运算符不能在newItemList对象上就地工作。他们创建并返回新对象。如果要进行就地排序,则应使用List&lt;&gt;的Sort()方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top