Skip and Take后对象Dictionary的转换结果

A B*_*gus 8 c# linq

我有一个像这样定义的对象字典 -

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使用自定义比较器.