首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IEnumerable<IGrouping<中转换每个T,将>>转换为IGrouping<,>

在IEnumerable<IGrouping<中转换每个T,将>>转换为IGrouping<,>
EN

Stack Overflow用户
提问于 2014-06-01 12:04:31
回答 1查看 475关注 0票数 1

我在我的代码中收到一个IEnumerable<T>。它可以是未分组的平面IEnumerable<T>,也可以是分组的a。

因此,我使用我写的小的、漂亮的小扩展检查这是否:

代码语言:javascript
复制
public static bool IsABunchOfGroups<T>(this IEnumerable<T> source)
{
  return typeof(T).IsAssignableFrom(typeof(IGrouping<,>));
}

但是,一旦检查了,如果它是一个IEnumerable<IGrouping<,>>,我想把它转换成这样,这样IEnumerable<T>中的每个T都会转换成IGrouping<,>,其中我不知道IGrouping<,>的泛型参数是什么。

我正在努力做到这一点。

所以,这是我想要的:

代码语言:javascript
复制
void WriteSequenceToStream(IEnumerable<T> sequence)
{
  if (sequence.IsABunchOfGroups())
  {
    foreach(var t in sequence)
    {
      // t as IGrouping<,>
    }
  }
}

再说一次,由于不确定泛型类型参数是什么,我甚至在这个上下文中使用dynamic关键字都是没有意义的:

代码语言:javascript
复制
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
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-01 12:14:43

为什么不干脆:

代码语言:javascript
复制
Collection.Select(item => (TheTypeYouWant)item);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23976667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档