[英]How can we type cast IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld into IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew?
I have an object IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld;
我有一个 object
IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld;
which i want to cast into IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew;
我想将其转换为
IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew;
. .
ClassA and ClassB both have same objects 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; } `
}
I tried following but it is generating exception.我尝试了以下但它正在生成异常。
objNew = objOld.Cast<IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>>>();
Please let me know possible ways to do so.请让我知道这样做的可能方法。
Only because two classes have the same members does not imply any inheritance-relation.仅仅因为两个类具有相同的成员并不意味着任何继承关系。 Instead of casting one to the other you should create new instances of
B
for every A
.您应该为每个
A
创建新的B
实例,而不是将一个转换为另一个。
var result = myInput.ToDictionary(x => x.Key, x => x.Select(y => new ClassB {
str1 = y.str1,
str2 = y.str2,
newNum = y.newNum
})
);
Or if you really want a list of KeyValuePair
:或者,如果您真的想要
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
})
));
You should use Select
method twice for that.您应该为此使用两次
Select
方法。 First time to map every KeyValuePair
to new one, second time to map internal IEnumerable<ClassA>
to IEnumerable<ClassB>
.第一次到 map 每个
KeyValuePair
到新的,第二次到 map 内部IEnumerable<ClassA>
到IEnumerable<ClassB>
。 There is no way to directly cast ClassA
instance to ClassB
, because classes are different.没有办法直接将
ClassA
实例转换为ClassB
,因为类是不同的。 So, you should create ClassB
instance manually based on properties of every ClassA
instance因此,您应该根据每个
ClassA
实例的属性手动创建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
})));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.