我有一个对象IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld;,我想把它转换成IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew;。
ClassA和ClassB都有相同的对象
public class ClassA
{ `public string str1 { get; set; }
public string str2 { get; set; }
public int newNum { get; set; } `
}
public class ClassB
{ `public string str1 { get; set; }
public string str2 { get; set; }
public int newNum { get; set; } `
}我试着跟随,但它正在产生异常。
objNew = objOld.Cast<IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>>>();请让我知道可能的方法。
发布于 2020-04-07 09:46:48
为此,您应该两次使用Select方法。第一次将每个KeyValuePair映射到新的,第二次将内部IEnumerable<ClassA>映射到IEnumerable<ClassB>。无法将ClassA实例直接转换为ClassB,因为类是不同的。因此,您应该根据每个ClassB实例的属性手动创建ClassA实例。
IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew = objOld.Select(o =>
new KeyValuePair<string, IEnumerable<ClassB>>(o.Key, o.Value.Select(a => new ClassB
{
str1 = a.str1,
str2 = a.str2,
newNum = a.newNum
})));发布于 2020-04-07 09:44:39
仅仅因为两个类具有相同的成员,并不意味着任何继承关系。与其将转换为另一个,不如为每个A创建新的B实例。
var result = myInput.ToDictionary(x => x.Key, x => x.Select(y => new ClassB {
str1 = y.str1,
str2 = y.str2,
newNum = y.newNum
})
);或者如果你真的想要一个KeyValuePair的列表
var result = myInput.Select(x =>
new KeyValuePair<string, IEnumerable<ClassB>>(x.Key, x => x.Select(y => new ClassB {
str1 = y.str1,
str2 = y.str2,
newNum = y.newNum
})
));https://stackoverflow.com/questions/61077032
复制相似问题