У меня есть словарь C#, Dictionary<Guid, MyObject>
то, что я должен быть фильтрован на основе собственности MyObject
.
Например, я хочу удалить все отчеты из словаря где MyObject.BooleanProperty = false
. Каков лучший способ достигнуть этого?
С момента словаря. IENumerable IENumerable
, вы можете просто использовать где
:
var matches = dictionary.Where(kvp => !kvp.Value.BooleanProperty);
, чтобы воссоздать новый словарь, если вам это нужно, используйте ТОГИМАЛЬНЫЙ
метод.
Если вы не заботитесь о создании нового словаря с нужными элементами и выбросить старый, просто попробуйте:
dic = dic.Where(i => i.Value.BooleanProperty)
.ToDictionary(i => i.Key, i => i.Value);
, если вы не можете создать новый словарь и надо Измените старую по какой-то причине (вроде бы, когда он снаружи ссылается, и вы не можете обновить все ссылки:
foreach (var item in dic.Where(item => !item.Value.BooleanProperty).ToList())
dic.Remove(item.Key);
Обратите внимание, что здесь необходимо TOLIST
, поскольку вы изменяете основную коллекцию. Если вы измените Основная коллекция, перечислитель, работающий над этим, чтобы запросить значения, будет неиспользуемым и выброс исключение в следующей итерации цикла Tolist
, кэширует значения, прежде чем изменять словарь вообще.
Вы можете просто использовать LINQ , где предложение:
var filtered = from kvp in myDictionary
where !kvp.Value.BooleanProperty
select kvp