2012-02-20 70 views
0

对于我的单元测试中的一个,我正在开发一个linq查询,它从MVC项目中检索所有控制器类型,并确保它从BaseController继承。如何从Linq查询中排除一个对象类型

var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom); 

如何从此列表中删除BaseController对象?我尝试了几件事情,但它总是从列表中删除所有不从BaseController继承的控制器。

这里是单元测试

[Fact] 
    public void All_Controllers_Inherit_From_BaseController() 
    { 
     var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom); 

     foreach (var controller in controllers) 
     { 
      Assert.True(controller.BaseType == typeof(BaseController)); 
     } 
    } 

谢谢!

回答

3

好了,两个选项涌现在脑海里:

  • 明确使用Except “删除” BaseController

    var controllers = typeof(MvcApplication).Assembly 
              .GetTypes() 
              .Except(new[] { typeof(BaseController) }) 
              .Where(typeof(IController).IsAssignableFrom); 
    
  • 只考虑具体类型;我认为BaseController是抽象:

    var controllers = typeof(MvcApplication).Assembly 
              .GetTypes() 
              .Where(type => !type.IsAbstract) 
              .Where(typeof(IController).IsAssignableFrom); 
    
+0

完美的感谢! – Swell 2012-02-20 12:00:38