public void UpdateDifferentReturnsDifferent() { MemberAssignment bind = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)); MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind); Assert.NotSame(memberBind, memberBind.Update(new[] { Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)) })); Assert.NotSame(memberBind, memberBind.Update(Enumerable.Empty <MemberBinding>())); }
public void UpdateDoesntRepeatEnumeration() { MemberAssignment bind = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)); MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind); Assert.NotSame(memberBind, memberBind.Update(new RunOnceEnumerable <MemberBinding>(new[] { Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)) }))); }
public void UpdateNullThrows() { MemberAssignment bind = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)); MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind); AssertExtensions.Throws <ArgumentNullException>("bindings", () => memberBind.Update(null)); }
public void UpdateSameReturnsSame() { MemberAssignment bind = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)); MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind); Assert.Same(memberBind, memberBind.Update(Enumerable.Repeat(bind, 1))); }
protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node) { var changed = false; var bindings = new MemberBinding[node.Bindings.Count]; for (int i = 0; i < node.Bindings.Count; i++) { bindings[i] = VisitMemberBinding(node.Bindings[i]); changed |= bindings[i] != node.Bindings[i]; } if (changed) { return(node.Update(bindings)); } return(node); }
protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node) { var b = Visit(node.Bindings, VisitMemberBinding); var bindings = (IList <MemberBinding>)b; var n = node.Bindings.Count; if (Pop(n, out var ess) && CanEvaluate(node.Member)) { _tilingState.Push(true); } else { _tilingState.Push(false); bindings = Reduce(bindings, ess); } return(node.Update(bindings)); }
/// <summary> /// Visits the children of the <see cref="MemberMemberBinding" />. /// </summary> /// <param name="node">The expression to visit.</param> /// <returns>The modified expression, if it or any subexpression was modified; /// otherwise, returns the original expression.</returns> protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node) { return(node.Update(Visit(node.Bindings, VisitMemberBinding))); }
protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node) { return(node.Update(node.Bindings.Select(VisitMemberBinding))); }
protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node) { var bindings = VisitBindingList(node.Bindings); return(node.Update(node.Member, bindings)); }
/// <summary> /// 访问 <see cref="MemberMemberBinding"/>。 /// </summary> /// <param name="binding"></param> /// <returns></returns> protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding) { var bindings = VisitBindingList(binding.Bindings); return(binding.Update(binding.Member, bindings)); }
protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding) { return(binding.Update(binding.Bindings.Select(b => VisitMemberBinding(b)))); }
protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node, Type expectedType) => node.Update(Visit(node.Bindings, binding => GetMemberType(binding.Member), VisitMemberBinding));