我有一个对象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>>>>();
[请让我知道可行的方法。
您应该为此使用两次Select
方法。第一次将每个KeyValuePair
映射到新的,第二次将内部IEnumerable<ClassA>
映射到IEnumerable<ClassB>
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
})));
仅由于两个类具有相同的成员,并不表示任何继承关系。而不是一个一个地[B
创建A
的新实例。
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 } ));