C# 如何将 IEnumerable> 强制转换/转换为另一种类型

本文关键字:object 转换 类型 另一种 IEnumerable IGrouping | 更新日期: 2023-09-27 18:37:10

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

IEnumerable<IGrouping<object, object>> GroupedValues;

对此:

IEnumerable<IGrouping<int, int>> GroupedValues;

我尝试过使用Cast,也尝试过

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

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

C# 如何将 IEnumerable<IGrouping<object、object>> 强制转换/转换为另一种类型

你可以

这样做

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>());

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

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

或者更改初始查询以区分键和项的大小写。