当前位置:  开发笔记 > 编程语言 > 正文

对于任何值类型T,如何确定对象的类型是否为IEnumerable <T>的子类?

如何解决《对于任何值类型T,如何确定对象的类型是否为IEnumerable<T>的子类?》经验,为你挑选了1个好方法。

我需要验证一个对象,看它是否为null,值类型,或者IEnumerablewhere T值是一个值类型.到目前为止,我有:

if ((obj == null) ||
    (obj .GetType().IsValueType))
{
    valid = true;
}
else if (obj.GetType().IsSubclassOf(typeof(IEnumerable<>)))
{
     // TODO: check whether the generic parameter is a value type.
}

所以我发现对象是null,值类型,或IEnumerable某些T; 如何检查这是否T是值类型?



1> Marc Gravell..:

(编辑 - 添加值类型位)

您需要检查它实现的所有接口(注意它理论上可以实现IEnumerable多个T):

foreach (Type interfaceType in obj.GetType().GetInterfaces())
{
    if (interfaceType.IsGenericType
        && interfaceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
    {
        Type itemType = interfaceType.GetGenericArguments()[0];
        if(!itemType.IsValueType) continue;
        Console.WriteLine("IEnumerable-of-" + itemType.FullName);
    }
}

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有