LINQクエリから1つのオブジェクトタイプを除外する方法
-
28-10-2019 - |
質問
私のユニットテストで1つは、MVCプロジェクトからすべてのコントローラータイプを取得し、ベースコントローラーから継承することを確認する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));
}
}
ありがとう!
解決
さて、2つのオプションが思い浮かびます:
明示的に「削除」
BaseController
使用Except
: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);
所属していません StackOverflow