Как исключить один тип объекта из запроса LINQ

StackOverflow https://stackoverflow.com/questions/9360596

  •  28-10-2019
  •  | 
  •  

Вопрос

Для одного на своем модульном тесте я разрабатываю запрос LINQ, который извлекает все типы контроллеров из проекта MVC и убедитесь, что он унаследовал от базового контроллера.

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

Как я могу удалить из этого списка объект 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));
        }
    }

Спасибо!

Это было полезно?

Решение

Ну, на ум приходят два варианта:

  • Явно "удалить" 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);
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top