2012-02-20 69 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