C# 跳过并执行后对象字典的强制转换结果

C# 跳过并执行后对象字典的强制转换结果,c#,linq,C#,Linq,我有一本这样定义的对象字典- Dictionary<string, MyObject> myObjectDictionary Skip/Take操作的结果将不是IDictionary,而是IEnumerable 如果要将其转换回字典,请尝试调用: 那么,您可以创建一个新词典: Dictionary<string, MyObject> myNewObjectDictionary = myObjectDictionary.Skip(startNumber)

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

Dictionary<string, MyObject> myObjectDictionary 

Skip
/
Take
操作的结果将不是
IDictionary
,而是
IEnumerable

如果要将其转换回字典,请尝试调用:


那么,您可以创建一个新词典:

Dictionary<string, MyObject> myNewObjectDictionary =
    myObjectDictionary.Skip(startNumber)
                      .Take(count)
                      .ToDictionary(pair => pair.Key, pair => pair.Value);
  • 这不会保留原始词典中的任何自定义相等比较器。不幸的是,它没有在任何地方公开,所以您只需要知道
    FillMyObjectDictionary
    是否使用自定义比较器


  • 您是否知道
    mySmallerObjectDictionary
    的内容将是不确定的?索引和字典不会混合,因为字典(或任何哈希表结构)的枚举顺序未定义。不要依赖于插入顺序与枚举顺序相同。如果事情按预期进行,这只是一个巧合。+10表示“这不保留原始词典中的任何自定义相等比较器”
    var myNewObjectDictionary = mySmallerObjectDictionary.ToDictionary(p => p.Key, p => p.Value); 
    
    Dictionary<string, MyObject> myNewObjectDictionary =
        myObjectDictionary.Skip(startNumber)
                          .Take(count)
                          .ToDictionary(pair => pair.Key, pair => pair.Value);
    
    Dictionary<string, MyObject> myNewObjectDictionary =
        myObjectDictionary.OrderBy(pair => pair.Key)
                          .Skip(startNumber)
                          .Take(count)
                          .ToDictionary(pair => pair.Key, pair => pair.Value);