C# 如何在Linq中识别嵌套组?

C# 如何在Linq中识别嵌套组?,c#,linq,C#,Linq,我有一个对象源,它是IEnumerable,其中T可以是某个类、IGrouping或嵌套IGrouping 如何识别它是嵌套组还是单个组或未分组?快速而肮脏的方法,但由于强大的字符串均衡,因此不是很好 public bool isOrHasGrouping<T>(IEnumerable<T> coll) { return typeof(T).Name.Contains("IGrouping") ? true

我有一个对象源,它是IEnumerable,其中T可以是某个类、IGrouping或嵌套IGrouping


如何识别它是嵌套组还是单个组或未分组?

快速而肮脏的方法,但由于强大的
字符串
均衡,因此不是很好

public bool isOrHasGrouping<T>(IEnumerable<T> coll)
{
    return
        typeof(T).Name.Contains("IGrouping") 
            ? true
        : (typeof(T).ContainsGenericParameters 
            ? typeof(T).GenericTypeArguments
                    .Any(item => item.Name.Contains("IGrouping")) 
            : false);
 }
public bool isorhasgroup(IEnumerable coll)
{
返回
typeof(T).Name.Contains(“IGrouping”)
真的吗
:(类型(T).包含通用参数
?typeof(T).GenericTypeArguments
.Any(item=>item.Name.Contains(“iGroup”))
:假);
}

这对我很有效。感谢Jan。下面是我从您的答案中提取的函数:

public static bool HasInnerGrouping<T>(this IEnumerable<T> coll)
{
    return typeof(T).GenericTypeArguments.Any(item => item.Name.Contains("IGrouping"));
}
公共静态bool HasInnerGrouping(此IEnumerable coll)
{
返回typeof(T).GenericTypeArguments.Any(item=>item.Name.Contains(“IGrouping”);
}

我有一辆雨篷车。。。但它太丑了,我不想贴出来:(没关系,jan,请分享答案贴出它…我希望它能帮助你更详细地解释你为什么要这么做?也许有更好的方法。Svick,当IEnumerable是一个参数时,我有一个函数,我需要显示它的内容以供查看,这里最好的部分是源可以分组、排序等。唯一有效的方法是t是groupd数据,我需要在其中显示键和数据,因此我需要确定数据是否分组。名称“igroupping”将来可能不会更改,因此它没有那么脏,但是普通的“Contains”可能返回误报。最好使用更详细的条件,如
type.IsGenericType&&type.getGenericTypeDefinitition()==typeof(i分组)
。但是,如果您真的不关心误报,那么
type.FullName.Contains(“i分组”)
可能就足够了;)