在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()的简洁答案,所以我不再重复)

09-18 01:49