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.
慕的地6264312
TA贡献1817条经验 获得超6个赞
这样的话
var v = _sysMenu.Keys.Skip(10);
foreach (var item in v)
{
_sysMenu.Remove(item);
}
我直接用上面这种方式还好点,上面这种方式不用做类型转换
梦里花落0921
TA贡献1772条经验 获得超6个赞
_sysMenu = _sysMenu.Take(10).ToDictionary(x => x.Key, x => x.Value);已测试!
互换的青春
TA贡献1797条经验 获得超6个赞
需要重写ToDictionary方法才可以,因为我是继承的
public class SerializableDictionary
: SortedDictionary, IXmlSerializable
{}
- 9 回答
- 0 关注
- 475 浏览
添加回答
举报
0/150
提交
取消