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

本文关键字:方法 参数 数组 类型 | 更新日期: 2023-09-27 18:28:28

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

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)行上类型的符号。

我知道我做错了什么,我想我需要在这里使用反射。

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

您要查找的是:

type.IsAssignableFrom(content.GetType())

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