我有一个父类(我们称之为ParentClass
),它只包含一些属性(在本例中为long
和string
),还有一个从它继承的类(我们将其称为ChildClass
),它不添加任何新属性,但只更改一些方法实现。
在一种方法中,我有一个Dictionary<int, ParentClass>
,我想将其转换为Dictionary<int, ChildClass>
。理想情况下,我想使用LINQ来实现这一点,但以下是我当前使用foreach
循环的实现:
bar = new Dictionary<int, ChildClass>();
foreach(var foo in parentDictionary) { //parentDictionary is Dictionary<int, ParentClass>
bar.Add(foo.Key, new ChildClass() { Id = foo.Value.Id, Name = foo.Value.Name});
}
有没有一种简单的方法可以用LINQ实现这种转换,使其成为一行代码?
IDictionary<TKey, TValue>
继承自IEnumerable<KeyValuePair<TKey, TValue>>
,因此我们可以使用任何LINQ方法:
parentDictionary.ToDictionary(
kv => kv.Key,
kv => new ChildClass { Id = kv.Value.Id, Name = kv.Value.Name });
它本质上是在做同样的事情,但您可以使用这样的LINQ ToDictionary方法:
bar = parentDictionary.ToDictionary(x => x.Key, new ChildClass() { Id = x.Value.Id, Name = x.Value.Name});