我们如何将IEnumerable >> objOld转换为IEnumerable >> objNew?

问题描述 投票:1回答:2

我有一个对象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>>>>();

[请让我知道可行的方法。

c# xamarin xamarin.forms xamarin.android xamarin.ios
2个回答
1
投票

您应该为此使用两次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
    })));

0
投票

仅由于两个类具有相同的成员,并不表示任何继承关系。而不是一个一个地[,您应该为每个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 } ));

© www.soinside.com 2019 - 2024. All rights reserved.