C# 我怎样才能 Cast/Convert 一个 IEnumerable<IGrouping<object, object>> 到另一个类型?
C# How can I Cast/Convert a IEnumerable<IGrouping<object, object>> to another type?
因此,我正在尝试转换以下变量:
IEnumerable<IGrouping<object, object>> GroupedValues;
为此:
IEnumerable<IGrouping<int, int>> GroupedValues;
我试过使用 Cast 也
Convert.ChangeType(GroupedValues, typeof(int));
但是如果我将它与 IEnumerable<IGrouping<int, int>>
变量进行比较,它似乎不是一个有效的转换;
你不能转换它,因为它不是逆变的 - 你可以重新投影它(假设所有键和值都可以转换为 int
):
var q = GroupedValues.SelectMany(g => g.Select (gv => new {Key = (int)g.Key, Item = (int)gv}))
.GroupBy (g => g.Key, g => g.Item);
或者更改初始查询以区分键和项目。
你可以做到这一点
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>());
因此,我正在尝试转换以下变量:
IEnumerable<IGrouping<object, object>> GroupedValues;
为此:
IEnumerable<IGrouping<int, int>> GroupedValues;
我试过使用 Cast 也
Convert.ChangeType(GroupedValues, typeof(int));
但是如果我将它与 IEnumerable<IGrouping<int, int>>
变量进行比较,它似乎不是一个有效的转换;
你不能转换它,因为它不是逆变的 - 你可以重新投影它(假设所有键和值都可以转换为 int
):
var q = GroupedValues.SelectMany(g => g.Select (gv => new {Key = (int)g.Key, Item = (int)gv}))
.GroupBy (g => g.Key, g => g.Item);
或者更改初始查询以区分键和项目。
你可以做到这一点
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>());