У меня есть три интерфейса в моем приложенииКомплексный запрос LINQ для создания двух списков, каждого значения в каждом списке и объединения списков?
public interface FBBase { }
public interface IFoo : FBBase { }
public interface IBar : FBBase { }
У меня есть класс, который содержит List
обоих IFoo
и IBar
public class FBUser
{
public List<IFoo> foos { get; set; }
public List<IBar> bars { get; set; }
}
и некоторые классы, которые реализуют эти интерфейсы
public class Fee : IFoo { }
public class Baz : IBar { }
public class PhiBat : IFoo, IBar { }
В другом классе я делаю некоторую работу с FBUser
объектов. Я хотел бы собрать List<IFBBase>
, который содержит каждую уникальную ссылку в FBUser.foos
и FBUser.bars
. Кроме того, я хотел бы также отметить некоторые Type
от List<IFBBase>
.
Есть ли более чистый способ сделать это, чем это? Это правильный способ сделать это?
public class FBUserWorker
{
List<Type> discludeTypes { get; set; } = new List<Type>();
public FBUserWorker()
{
discludeTypes.Add(typeof(PhiBat));
}
public void DoWork(FBUser userObj)
{
var fbBaseList = userObj.foos.Where(x => !discludeTypes.Contains(x.GetType())).Cast<IFBBase>().ToList();
fbBaseList.AddRange(userObj.bars.Where(x => !discludeTypes.Contains(x.GetType())).Cast<IFBBase>().ToList());
fbBaseList = fbBaseList.Distinct().ToList();
}
}