Come escludere un tipo di oggetto da una query LINQ
-
28-10-2019 - |
Domanda
Per uno sul mio test unitario sto sviluppando una query LINQ che recupera tutti i tipi di controller da un progetto MVC e assicurati che eredita da un basecontroller.
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
Come posso rimuovere da questo elenco l'oggetto BaseController? Ho provato diverse cose ma rimuove sempre dall'elenco tutti i controller che non ereditano da BaseController.
Ecco il test dell'unità
[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));
}
}
Grazie!
Soluzione
Bene, due opzioni mi vengono in mente:
Esplicitamente "rimuovere"
BaseController
usandoExcept
:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Except(new[] { typeof(BaseController) }) .Where(typeof(IController).IsAssignableFrom);
Considera solo tipi concreti; Presumo
BaseController
è astratto:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Where(type => !type.IsAbstract) .Where(typeof(IController).IsAssignableFrom);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow