这行Linq代码觉得很变扭,有没有什么办法可改变下
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回答
-
墨色风雨
你的_sysMenu类型是Dictionary,而它是一个无序的类型(即使目前看起来好像是按照添加的顺序,但是这个是undocumented behavior,不能保证将来不会被修改),因此你需求里的“第11个以后”根本无法确定。首先需要将它的类型改成SortedDictionary(你可能需要修改一些代码,比如指定一个合适的comparer),然后_sysMenu.Take(10)取到前10个,接下来根据具体需求选择是ToList还是ToArray还是ToDictionary.
-
函数式编程
你需要移除的是11以后的所有项,也就是其实你定义一个list得到前10项就行了
-
慕的地6264312
这样的话
var v = _sysMenu.Keys.Skip(10);
foreach (var item in v)
{
_sysMenu.Remove(item);
}
我直接用上面这种方式还好点,上面这种方式不用做类型转换
-
FFIVE
直接 foreach 好不好。 谁写的 那个linq ,想遭喷啊 。
-
宝慕林4294392
哥们自己写的,想一行代码整完,整出个四不像来了
-
梦里花落0921
_sysMenu = _sysMenu.Take(10).ToDictionary(x => x.Key, x => x.Value);已测试!
-
互换的青春
需要重写ToDictionary方法才可以,因为我是继承的
public class SerializableDictionary
: SortedDictionary, IXmlSerializable
{}
-
素胚勾勒不出你
_sysMenu.Take(10).ToList().ForEach(item => sysMenu.Remove(item));
-
UYOU
_sysMenu.Keys.Take(10) ;