加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在linq中使用OrderBy()?

发布时间:2020-12-16 00:20:23 所属栏目:百科 来源:网络整理
导读:我需要修改一个集合,以便我可以对其中的项目序列进行排序. 所以我做的事情如下: IEnumerableItemType ordered = myItems.OrderBy( (item) = item.Age); 但是,我想修改myItems集合本身以获得有序序列……是否可能? 我想要的东西: myItems.SomeActionHere /
我需要修改一个集合,以便我可以对其中的项目序列进行排序.

所以我做的事情如下:

IEnumerable<ItemType> ordered = myItems.OrderBy( (item) => item.Age);

但是,我想修改myItems集合本身以获得有序序列……是否可能?

我想要的东西:

myItems.SomeActionHere // This should modify myItems in place.

这可能是一个新手或菜鸟问题.对于那个很抱歉.

解决方法

如果它是一个数组,您可以使用 Array.Sort.这将执行就地排序而不重复引用/值.

但是,同样地,您可以将.ToArray()或.ToList()标记到linq语句的末尾,以“实现”有序的可枚举,如果重复引用不是问题(通常不是).

例如:

myItems = myItems.OrderBy(i => i.Age).ToArray();

如果你绝对需要它作为另一个ReadOnlyCollection实例 – 你可以这样做:

myItems = new ReadOnlyCollection<ItemType>(myItems.OrderBy(i => i.Age).ToArray());

注意.ToArray()的工作原理是因为数组实现了IList< T>.即使它们不可修改.

或者 – 也有Array.AsReadOnly – 打开它的头:

myItems = Array.AsReadOnly(myItems.OrderBy(i => i.Age).ToArray());

除了是一个较短的代码行,我没有看到太多的好处 – 除非减少角括号对你很重要:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读