public IList<Prop> GetProps(Func<Prop, bool> predicate) { var result = new List<Prop>(); _propsRWLS.EnterReadLock(); try { result.AddRange(_props.Values.Where(predicate)); } finally { _propsRWLS.ExitReadLock(); } return result; }