所以我试图找到如何最好地创建一个列表,将两个相同大小的两个不同类型的列表组合在一起,以便索引将是相同的。我怎么能这样做?
var list = new List<KeyValuePair<List<Card>, List<Card>>>();
list.AddRange(new List<KeyValuePair<List<Card>,List<Card>>>(_listCards,cloneOf_listCards));
上面的代码一直是我尝试让它工作的方式,其中Card是一个同时包含Suit和Cardnumber的类。虽然我的代码没有这样做,但我希望将它作为一个列表,使用Images而不是Card
列表。我已经看过这些和许多其他线程:join of two lists in c#
https://stackoverflow.com/questions/16465804/return-two-combined-listt
答案 0 :(得分:3)
您可以使用Enumerable.Zip
扩展方法。
例如:
_listCards.Zip(cloneOf_listCards, (cardA, cardB) => new KeyValuePair<Card, Card>(cardA, cardB));
当然,这会给你一个List<KeyValuePair<Card,Card>>
而不是KeyValuePair<List<Card>, List<Card>>
,但我认为这是一个更好的设计。
此时(如果你愿意),你可以把它变成Dictionary<Card,Card>
:
var joined = _listCards.Zip(cloneOf_listCards, (cardA, cardB) => new KeyValuePair<Card, Card>(cardA, cardB));
var dictionary = joined.ToDictionary(kv => kv.Key, kv => kv.Value);
请注意,如果您的列表大小不同,Enumerable.Zip
只会将元素加入到较短列表的末尾,然后停止。