public Enumerator(MemberExpressionCacheKey key) { Current = null; _members = key.Members; _memberExpression = key.MemberExpression; _index = -1; }
private static Func <TModel, object> CompileForChainedMemberAccess( Expression <Func <TModel, TResult> > expression, MemberExpression memberExpression) { // Input: () => m.Member1.Member2 // Output: () => (m == null || m.Member1 == null) ? null : m.Member1.Member2 var key = new MemberExpressionCacheKey(typeof(TModel), memberExpression); if (_chainedMemberAccessCache.TryGetValue(key, out var result)) { return(result); } var cacheableKey = key.MakeCacheable(); result = _chainedMemberAccessCache.GetOrAdd(cacheableKey, Rewrite(expression, memberExpression)); return(result); }