我们如何将 IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld 强制转换为 IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew?
How can we type cast IEnumerable<KeyValuePair<string, IEnumerable<ClassA>>> objOld into IEnumerable<KeyValuePair<string, IEnumerable<ClassB>>> objNew?
我有一个对象 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>>>>();
请告诉我可能的方法。
仅因为两个 类 具有相同的成员并不意味着任何继承关系。您应该为每个 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
})
));
你应该使用 Select
方法两次。第一次将每个 KeyValuePair
映射到新的,第二次将内部 IEnumerable<ClassA>
映射到 IEnumerable<ClassB>
。
没有办法直接将ClassA
实例转换为ClassB
,因为类是不同的。因此,您应该根据每个 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
})));
我有一个对象 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>>>>();
请告诉我可能的方法。
仅因为两个 类 具有相同的成员并不意味着任何继承关系。您应该为每个 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
})
));
你应该使用 Select
方法两次。第一次将每个 KeyValuePair
映射到新的,第二次将内部 IEnumerable<ClassA>
映射到 IEnumerable<ClassB>
。
没有办法直接将ClassA
实例转换为ClassB
,因为类是不同的。因此,您应该根据每个 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
})));