c# - 查找类是否继承接口(interface)的更有效方法?

标签 c# reflection inheritance

在 C# 中,目前我正在执行以下代码来过滤掉一组特定的类,这些类继承自传递给方法的 CaptureType。

    public static CaptureType[] ListPluginsWith<CaptureType>()
    {
        List<CaptureType> plugins = new List<CaptureType>();
        foreach (var plugin in Bot.AutoPlugins)
        {
            CaptureType plug;
            try
            {
                if ((plug = (CaptureType)plugin.Interface) != null)
                {
                    plugins.Add(plug);
                }
            }
            catch
            {
                //doesn't inherit
            }
        }
        return plugins.ToArray();
    }

有没有更有效/更好/更快的方法来做到这一点?如果是这样,请告诉我:)

最佳答案

if (plugin.Interface is CaptureType)
{
    // inherits
}

甚至

return Bot.AutoPlugins.Where(i => i.Interface is CaptureType).ToArray();

UPD:如果强烈要求返回CaptureType:

return Bot.AutoPlugins.Where(i => i.Interface is CaptureType)
                      .Select(i => i as CaptureType)
                      .ToArray();

(是的,现在它看起来有点臃肿,但是在这个线程中有另一个关于 OfType() 的简洁答案,所以我不会重复)

关于c# - 查找类是否继承接口(interface)的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774986/

相关文章:

c# - 尝试加载程序集 ID 65675 时 Microsoft .NET Framework 中发生错误

java - 我应该如何解释接口(interface)和抽象类之间的区别?

c# - DateTime 时间差和毫秒数

c# - ASP.NET MVC 使用 ajax 从 Controller 获取列表

java - 在构造函数本身内部获取反射构造函数

c# - 从抽象类调用GetMethod获取子类的方法?

javascript - 如何在 JavaScript 中进行原型(prototype)继承?

c++ - 从基类调用派生类函数

c# - 在 C# 中跟踪所有对象引用

c++ - 找出c++中两个对象类之间的继承关系