C#如何转换/转换IEnumerable <igrouping <object,object =“”>&gt;到另一种类型?

时间:2016-03-03 16:58:50

标签: c# casting ienumerable igrouping

所以,我正在尝试转换以下变量:

IEnumerable<IGrouping<object, object>> GroupedValues;

对此:

IEnumerable<IGrouping<int, int>> GroupedValues;

我尝试过使用Cast和

Convert.ChangeType(GroupedValues, typeof(int));

但如果我将它与IEnumerable<IGrouping<int, int>>变量进行比较,它似乎不是有效的转换;

2 个答案:

答案 0 :(得分:3)

你可以这样做

var result = GroupedValues.GroupBy(x => (int)x.Key, x => x.Cast<int>());

如果任何对象不是int,则会抛出异常。所以你可以过滤只获得这样的整数项目。

var result = GroupedValues.Where(x => x.Key is int && x.All(i => i is int)).GroupBy(x => (int)x.Key, x => x.Cast<int>());

答案 1 :(得分:2)

你不能施放它,因为它不是逆变的 - 你可以重新投射它(假设所有的键和值都可以转换为int):

var q = GroupedValues.SelectMany(g => g.Select (gv => new {Key = (int)g.Key, Item = (int)gv}))
                     .GroupBy (g => g.Key, g => g.Item);

或者将初始查询更改为包含键和项目。