C# 在linq中使用OrderBy()?
我需要修改集合,以便对其中的项目序列进行排序 所以我在做一些类似的事情:C# 在linq中使用OrderBy()?,c#,linq,C#,Linq,我需要修改集合,以便对其中的项目序列进行排序 所以我在做一些类似的事情: IEnumerable<ItemType> ordered = myItems.OrderBy( (item) => item.Age); myItems.SomeActionHere // This should modify myItems in place. 这可能是一个新手问题,也可能是一个noob问题。很抱歉。您将无法使用Linq订购我放置的系列。除非您专门为您的序列类型执行OrderBy。
IEnumerable<ItemType> ordered = myItems.OrderBy( (item) => item.Age);
myItems.SomeActionHere // This should modify myItems in place.
这可能是一个新手问题,也可能是一个noob问题。很抱歉。您将无法使用Linq订购我放置的系列。除非您专门为您的序列类型执行
OrderBy
。如果它是您可以使用的数组。这将在不复制引用/值的情况下执行就地排序
但是,同样,如果重复引用不是问题(通常不是问题),则可以在linq语句末尾标记.ToArray()
或.ToList()
,以“实现”有序枚举
例如:
如果您确实需要它作为另一个ReadOnlyCollection
实例返回,您可以这样做:
myItems = new ReadOnlyCollection<ItemType>(myItems.OrderBy(i => i.Age).ToArray());
除了代码行较短之外,我看不出有什么好处——除非减少尖括号对您很重要:)
OrderBy
(与大多数其他Linq操作符一样)是懒惰的;它不会具体化结果,只是每次都重新读取源集合。因此,如果您更改myItems
的内容,每次您将枚举ordered
时,您将看到myItems
中的最新更改使用或转换为。myItems=myItems.OrderBy(i=>i.Age)
?myItems属于ReadOnlyCollection@Andras...thats甚至更好。我的代码中较短的代码行总是受欢迎的。我甚至不知道有一个数组。AsReadOnly()。我不知道你们怎么查这些东西…缩小尖括号?这是什么意思?
myItems = new ReadOnlyCollection<ItemType>(myItems.OrderBy(i => i.Age).ToArray());
myItems = Array.AsReadOnly(myItems.OrderBy(i => i.Age).ToArray());