Comment exclure un type d'objet d'une requête Linq
-
28-10-2019 - |
Question
Pour un sur mon test unitaire je développe une requête LINQ qui récupère tous les contrôleurs types d'un projet MVC et assurez-vous qu'il hérite d'un BaseController.
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
Comment puis-je retirer de cette liste l'objet BaseController? J'ai essayé plusieurs choses mais toujours supprimer de la liste tous les contrôleurs qui ne sont pas Hérite de BaseController.
Voici le test unitaire
[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));
}
}
Merci!
La solution
Eh bien, deux options viennent à l'esprit:
-
Explicitement "supprimer"
BaseController
en utilisantExcept
:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Except(new[] { typeof(BaseController) }) .Where(typeof(IController).IsAssignableFrom);
-
Ne considérer les types concrets; Je suppose que
BaseController
est abstraite:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Where(type => !type.IsAbstract) .Where(typeof(IController).IsAssignableFrom);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow