为了账号安全,请及时绑定邮箱和手机立即绑定

这行Linq代码觉得很变扭,有没有什么办法可改变下

这行Linq代码觉得很变扭,有没有什么办法可改变下

森栏 2018-12-07 11:39:16
var a = from k in _sysMenu.Keys.Skip(10) where _sysMenu.Remove(k) select k; 不需要返回值的linq修改,大家有什么办法修改下 _sysMenu这是一个全部变量,类型为Dictionary 实现的需要时需要将第11个以后的变量全部修改掉,下面是上面那一行代码的变种 var v = _sysMenu.Keys.Skip(10); foreach (var item in v) { _sysMenu.Remove(item); }
查看完整描述

9 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

你的_sysMenu类型是Dictionary,而它是一个无序的类型(即使目前看起来好像是按照添加的顺序,但是这个是undocumented behavior,不能保证将来不会被修改),因此你需求里的“第11个以后”根本无法确定。首先需要将它的类型改成SortedDictionary(你可能需要修改一些代码,比如指定一个合适的comparer),然后_sysMenu.Take(10)取到前10个,接下来根据具体需求选择是ToList还是ToArray还是ToDictionary.
查看完整回答
反对 回复 2018-12-09
?
函数式编程

TA贡献1807条经验 获得超9个赞

你需要移除的是11以后的所有项,也就是其实你定义一个list得到前10项就行了
查看完整回答
反对 回复 2018-12-09
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

这样的话 var v = _sysMenu.Keys.Skip(10); foreach (var item in v) { _sysMenu.Remove(item); } 我直接用上面这种方式还好点,上面这种方式不用做类型转换
查看完整回答
反对 回复 2018-12-09
?
FFIVE

TA贡献1797条经验 获得超6个赞

直接 foreach 好不好。    谁写的 那个linq ,想遭喷啊 。
查看完整回答
反对 回复 2018-12-09
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

哥们自己写的,想一行代码整完,整出个四不像来了
查看完整回答
反对 回复 2018-12-09
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

_sysMenu = _sysMenu.Take(10).ToDictionary(x => x.Key, x => x.Value);已测试!
查看完整回答
反对 回复 2018-12-09
?
互换的青春

TA贡献1797条经验 获得超6个赞

需要重写ToDictionary方法才可以,因为我是继承的 public class SerializableDictionary : SortedDictionary, IXmlSerializable {}
查看完整回答
反对 回复 2018-12-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

_sysMenu.Take(10).ToList().ForEach(item => sysMenu.Remove(item));
查看完整回答
反对 回复 2018-12-09
?
UYOU

TA贡献1878条经验 获得超4个赞

_sysMenu.Keys.Take(10) ;
查看完整回答
反对 回复 2018-12-09
  • 9 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信