результирующее лямбда-выражение, выполняемое методом «ToList ()», отличается от bofore - PullRequest
0 голосов
/ 25 апреля 2018

Это мой код:

Проект 1:

public interface IComponent{}

public class ComponentTest:IComponent{}

public class Bootstraper
{
   public virtual IEnumerable<IComponent> GetComponents()
   {
       return Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll")
       .Select(Assembly.LoadFile).SelectMany(m => m.GetTypes()).Select(m => m.GetTypeInfo())
       .Where(m => !m.IsAbstract && !m.IsInterface 
                   && typeof(IComponent).IsAssignableFrom(m)).ToList()
       .Select(Activator.CreateInstance).Cast<IPlatformComponent>();
   }
}

Project UnitTest:

[TestMethod]
public void GetComponenentsIsSuccess()
{
    Bootstraper testObj=new Bootstraper();

    IEnumerable<IComponent> ienumerable = testObj.GetComponents();
    Assert.IsTrue(ienumerable.Any(m=>m.GetType()==typeof(ComponenentTest)));
}

не может найти ComponenetTest при исключении модульного теста.

У меня два вопроса:

1. На VS Debugger View, код Where(m=>!m.IsAbstract&&!m.IsInterface&&typeof(IComponent).IsAssignableFrom(m)) может получить тип ComponenentTest, но тип был отменен, когда ToList() метод оправдан.

2. тип ComponentTest исчезает, когда код typeof(IComoponent), но вместо этого я использую typeof(object), после извиняемого 'ToList ()', ComponentTest все еще находится в коллекции

1 Ответ

0 голосов
/ 25 апреля 2018

для Tolist () добавить пространство имен using System.Linq;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...