我的代码中收到IEnumerable<T>
。它可以是非分组的,平坦的IEnumerable<T>
或分组的。{/ p>
因此,我使用我写的微小,漂亮的小扩展来检查这是否是:
public static bool IsABunchOfGroups<T>(this IEnumerable<T> source)
{
return typeof(T).IsAssignableFrom(typeof(IGrouping<,>));
}
然而,一旦选中,如果它是IEnumerable<IGrouping<,>>
,我想将其投射到那里,以便将IEnumerable<T>
中的每个T转换为IGrouping&lt;,&gt;我不知道IGrouping<,>
的泛型类型参数是什么。
我正在努力做到这一点。
所以,这就是我想要的:
void WriteSequenceToStream(IEnumerable<T> sequence)
{
if (sequence.IsABunchOfGroups())
{
foreach(var t in sequence)
{
// t as IGrouping<,>
}
}
}
再一次,不确定泛型类型的参数是什么,在这样的上下文中甚至使用dynamic
关键字是没有意义的:
void WriteSequenceToStream(IEnumerable<T> sequence)
{
if (sequence.IsABunchOfGroups())
{
foreach(var t in sequence)
{
// t as IGrouping<,>
dynamic element = t;
someTextWriter.WriteLine(element.Key);
foreach(dynamic item in element)
{
// Oh yeah, may be I could! Anyway, still
// is there a way I could do it without the dynamic keyword?
// I think I am asking a question I've asked in the past
// many times already, in one form or another
}
}
}
}
答案 0 :(得分:0)
为什么不呢:
Collection.Select(item => (TheTypeYouWant)item);