简体   繁体   English

我们如何键入强制转换 IEnumerable <keyvaluepair<string, ienumerable<classa> &gt;&gt; objOld 变成 IEnumerable <keyvaluepair<string, ienumerable<classb> &gt;&gt; 新对象? </keyvaluepair<string,></keyvaluepair<string,>

[英]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.

相关问题 IEnumerable <KeyValuePair<string,string> &gt;在DisplayMemberPath中 - IEnumerable<KeyValuePair<string,string>> in DisplayMemberPath 无数 <KeyValuePair<T, string> &gt;作为数据源。 如何? - Ienumerable<KeyValuePair<T, string>> as a datasource . how to? C# 如何与 IEnumerable 类型的 object 联合<keyvaluepair<guid, string> &gt; </keyvaluepair<guid,> - C# how union with object of type IEnumerable<KeyValuePair<Guid, string>> 我该如何投射IEnumerable <?> 到IEnumerable <string> ? - How can I cast IEnumerable<?> to IEnumerable<string>? 转换IEnumerable <KeyValuePair<string, object> &gt;对象到XML - convert an IEnumerable<KeyValuePair<string, object>> object to XML 不允许IEnumerable中的重复项 <KeyValuePair<Guid,string> &gt; - Not allowing duplicates in IEnumerable<KeyValuePair<Guid,string>> 为什么我不能通过字典 <string, string> 到IEnumerable <KeyValuePair<string, string> &gt;作为通用类型 - Why can't i pass Dictionary<string, string> to IEnumerable<KeyValuePair<string, string>> as generic type 如何将 NameValueCollection 转换为 IEnumerable <keyvaluepair<string, stringvalues> &gt; 表单值? </keyvaluepair<string,> - How to convert a NameValueCollection to IEnumerable<KeyValuePair<string, StringValues>> FormValues? 如何在 IEnumerable < KeyValuePair 中添加新对<string, int> ></string,> - How to add new pairs in IEnumerable < KeyValuePair<string, int>> 如何将逗号分隔的字符串转换为LIST或IEnumerable的KeyValuePair - How to convert Comma separated string to KeyValuePair of LIST or IEnumerable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM