繁体   English   中英

将每个T转换为IEnumerable <IGrouping<,> &gt;到IGrouping &lt;,&gt;

[英]Cast each T in the IEnumerable<IGrouping<,>> to IGrouping<,>

我在代码中收到IEnumerable<T> 它可以是未分组的扁平IEnumerable<T>或已分组的一个。

因此,我使用我编写的小巧漂亮的扩展名来检查是否:

public static bool IsABunchOfGroups<T>(this IEnumerable<T> source)
{
  return typeof(T).IsAssignableFrom(typeof(IGrouping<,>));
}

但是,一旦检查,如果它是IEnumerable<IGrouping<,>>我想将其IEnumerable<IGrouping<,>>转换为那个,以便将IEnumerable<T>中的每个T强制转换为IGrouping <,>,我不知道泛型是什么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
      }
    }
  }
}

为什么不只是:

Collection.Select(item => (TheTypeYouWant)item);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM