我有一个像这样定义的对象字典 -
Dictionary<string, MyObject> myObjectDictionary
Run Code Online (Sandbox Code Playgroud)
我想根据索引和项目数来获取字典中的项目.我正在尝试使用Skip和Take.但这需要重新制作它Dictionary<string, MyObject>.如何才能做到这一点?我应该采取不同的方式吗?
这是我的代码,尝试重铸失败 -
Dictionary<string, MyObject> myObjectDictionary = FillMyObjectDictionary();
var mySmallerObjectDictionary = myObjectDictionary.Skip(startNumber).Take(count);
//THE FOLLOWING DOES NOT WORK
Dictionary<string, MyObject> myNewObjectDictionary = (Dictionary<string, MyObject>)mySmallerObjectDictionary
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 19
好吧,你可以创建一个新词典:
Dictionary<string, MyObject> myNewObjectDictionary =
myObjectDictionary.Skip(startNumber)
.Take(count)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
然而:
你不应该依赖字典的顺序.目前尚不清楚您希望跳过哪些项目.考虑使用OrderBy之前Skip.例如:
Dictionary<string, MyObject> myNewObjectDictionary =
myObjectDictionary.OrderBy(pair => pair.Key)
.Skip(startNumber)
.Take(count)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)这并没有保留任何自定义相等比较,这是在原来的字典.不幸的是,它没有暴露在任何地方,所以你只需要知道是否FillMyObjectDictionary使用自定义比较器.