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

如果object是Generic List

如何解决《如果object是GenericList》经验,为你挑选了2个好方法。

有没有办法确定对象是否是通用列表?我不会知道列表的类型,我只知道它是一个列表.我该如何确定?



1> Timothy Khou..:

这将返回"True"

List myList = new List();

Console.Write(myList.GetType().IsGenericType && myList is IEnumerable);

你是否想知道它是否恰好是一个"列表"......或者你是否可以使用IEnumerable和Generic?



2> Nathan Baulc..:

以下方法将返回泛型集合类型的项类型.如果类型未实现ICollection <>则返回null.

static Type GetGenericCollectionItemType(Type type)
{
    if (type.IsGenericType)
    {
        var args = type.GetGenericArguments();
        if (args.Length == 1 &&
            typeof(ICollection<>).MakeGenericType(args).IsAssignableFrom(type))
        {
            return args[0];
        }
    }
    return null;
}

编辑:上述解决方案假定指定的类型具有自己的泛型参数.这对于使用硬编码通用参数实现ICollection <>的类型不起作用,例如:

class PersonCollection : List {}

这是一个处理这种情况的新实现.

static Type GetGenericCollectionItemType(Type type)
{
    return type.GetInterfaces()
        .Where(face => face.IsGenericType &&
                       face.GetGenericTypeDefinition() == typeof(ICollection<>))
        .Select(face => face.GetGenericArguments()[0])
        .FirstOrDefault();
}

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