提供类型数组作为方法参数

时间:2014-10-31 01:34:54

标签: c# generics system.reflection

我有一个相当简单的方法:

public static LinkItemCollection ToList<T>(this LinkItemCollection linkItemCollection)
{
    var liCollection = linkItemCollection.ToList(true);
    var newCollection = new LinkItemCollection();

    foreach (var linkItem in liCollection)
    {
        var contentReference = linkItem.ToContentReference();
        if (contentReference == null || contentReference == ContentReference.EmptyReference)
            continue;

        var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
        IContentData content = null;
        var epiObject = contentLoader.TryGet(contentReference, out content);
        if (content is T)
            newCollection.Add(linkItem);
    }

    return newCollection;
}

这很好 - 我可以调用方法并提供类型为T.但是,我希望能够做的是能够指定多种类型。因此,我错误地认为我可以将方法重构为:

public static LinkItemCollection ToList(this LinkItemCollection linkItemCollection, Type[] types)
{
    var liCollection = linkItemCollection.ToList(true);
    var newCollection = new LinkItemCollection();

    foreach (var linkItem in liCollection)
    {
        var contentReference = linkItem.ToContentReference();
        if (contentReference == null || contentReference == ContentReference.EmptyReference)
            continue;

        foreach (var type in types)
        {
            var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
            IContentData content = null;
            var epiObject = contentLoader.TryGet(contentReference, out content);
            if (content is type)
                newCollection.Add(linkItem);
        }
    }

    return newCollection;
}

但是,Visual Studio显示它无法解析行if(content is type)上的类型符号。

我知道我做错了什么,我猜我需要在这里使用Reflection。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是:

type.IsAssignableFrom(content.GetType())

is仅用于检查编译时已知的类型,而不是在运行时。