public static ReadOnlyDictionaryRangeActiveExpression <TKey, TValue, TResult> Create(IReadOnlyDictionary <TKey, TValue> source, Expression <Func <TKey, TValue, TResult> > expression, ActiveExpressionOptions?options = null) { ReadOnlyDictionaryRangeActiveExpression <TKey, TValue, TResult> rangeActiveExpression; bool monitorCreated; var key = new RangeActiveExpressionsKey(source, expression, options); lock (rangeActiveExpressionsAccess) { if (monitorCreated = !rangeActiveExpressions.TryGetValue(key, out rangeActiveExpression)) { rangeActiveExpression = new ReadOnlyDictionaryRangeActiveExpression <TKey, TValue, TResult>(source, expression, options, key); rangeActiveExpressions.Add(key, rangeActiveExpression); } ++rangeActiveExpression.disposalCount; } if (monitorCreated) { rangeActiveExpression.Initialize(); } return(rangeActiveExpression); }
ReadOnlyDictionaryRangeActiveExpression(IReadOnlyDictionary <TKey, TValue> source, Expression <Func <TKey, TValue, TResult> > expression, ActiveExpressionOptions?options, RangeActiveExpressionsKey rangeActiveExpressionsKey) { this.source = source; this.expression = expression; Options = options; this.rangeActiveExpressionsKey = rangeActiveExpressionsKey; activeExpressions = this.source.CreateSimilarDictionary <TKey, TValue, IActiveExpression <TKey, TValue, TResult> >(); }