Список Lambda списков - PullRequest
       0

Список Lambda списков

0 голосов
/ 24 февраля 2020

У меня есть объект, который содержит несколько списков, которые все получены из ObjectCollection (T): IObjectCollection (T)

public P()
{
    A = new A();
    C = new C();
    H = new H();
    M = new M();
    T = new T();
}

Я хочу иметь возможность перебирать эти списки, как если бы они были один список, но я хочу, чтобы верхние списки были разделены, и я не хочу проецировать новый список из них. Поэтому я подумал о том, чтобы сделать что-то подобное в классе P:

public T GetObject<T>(IUniqueIdentifier identifier) where T : class
{
    T dObject = A.FirstOrDefault(a => a.GuidId == identifier) as T ?? H.FirstOrDefault(a => a.GuidId == identifier) as T ?? M.FirstOrDefault(a => a.GuidId == identifier) as T ?? T.FirstOrDefault(a => a.GuidId == identifier) as T;
    return Object;
}

Все объекты в списках происходят от ObjectBase и имеют свойство GuidId publi c.

Но это кажется Руби sh раствор. Тогда я подумал о том, чтобы сделать что-то вроде этого:

List<IObjectCollection<ObjectBase>> _objects = new List<IObjectCollection<ObjectBase>>{A,C,H,M,T};

и затем использовать что-то вроде этого (код не точный!):

public T GetObject<T>(Guid identifier) where T : class
{
    T Object = _objects.FirstOrDefault(c => c.Contains(identifier)) as T;
    return Object;
}

Но, увы, я просто не могу выработать правильный способ сделать это.

Любая помощь приветствуется.

Stu.

1 Ответ

0 голосов
/ 24 февраля 2020

Может ли что-то подобное не сработать? Хотя я не думаю, что у меня достаточно контекста, чтобы понять, почему вы так делаете.

void Main()
{
    var myObj = GetObject(guid, A, C, H, M, T);
}

public T GetObject<T>(Guid identifier, params IObjectCollection<T>[] collections)
    where T : ObjectBase
{
    foreach (var collection in collections)
    {
        var item = collection.FirstOrDefault(o => o.GuidId == identifier);
        if (item != null) return item;
    }
    return default;
}

public class ObjectBase
{
    public Guid GuidId { get; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...