Потянуть подмножество элементов из словаря


У меня есть функция, которая возвращает набор значений из словаря.
Я не сейчас хочу, чтобы позволить ему бросать исключения keynotfoundexception, поэтому я фильтрую ключи, прежде чем я пытаюсь выбрать значения.

У меня есть ощущение, это может быть сделано в более простой способ, но я не уверен, куда идти с ним.

// this.resources is a Dictionary<string, Resource>

public IEnumerable<Resource> GetResources(IEnumerable<string> resourceNames)
{
    HashSet<string> hs = new HashSet<string>(resourceNames);

    hs.IntersectWith(this.resources.Keys);

    List<Resource> resources = new List<Resource>();

    foreach(string resourceName in hs)
    {
        resources.Add(this.resources[resourceName]);
    }

    return resources;
}


10255
6
c#
задан 25 февраля 2011 в 04:02 Источник Поделиться
Комментарии
1 ответ

Я бы написал это очевидный прямой LINQ в пути, который дает вам хорошую читаемость, а также отложенные вычисления:

public IEnumerable<Resource> GetResources(IEnumerable<string> resourceNames)
{
return resourceNames
.Where(name => resources.ContainsKey(name))
.Select(name => resources[name]);
}

12
ответ дан 25 февраля 2011 в 05:02 Источник Поделиться