public void UpdateNullThrows() { MemberListBinding binding = Expression.ListBind( typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)), Enumerable.Range(0, 3) .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i)))); Assert.Throws <ArgumentNullException>("initializers", () => binding.Update(null)); }
public void UpdateSameReturnsSame() { ElementInit[] initializers = Enumerable.Range(0, 3) .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i))) .ToArray(); MemberListBinding binding = Expression.ListBind( typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)), initializers); Assert.Same(binding, binding.Update(initializers)); }
protected override MemberListBinding VisitMemberListBinding(MemberListBinding node) { var changed = false; var initializers = new ElementInit[node.Initializers.Count]; for (int i = 0; i < node.Initializers.Count; i++) { initializers[i] = VisitElementInit(node.Initializers[i]); changed |= initializers[i] != node.Initializers[i]; } if (changed) { return(node.Update(initializers)); } return(node); }
public void UpdateDoesntRepeatEnumeration() { MemberListBinding binding = Expression.ListBind( typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)), Enumerable.Range(0, 3) .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i)))); Assert.NotSame( binding, binding.Update( new RunOnceEnumerable <ElementInit>( new[] { Expression.ElementInit( typeof(List <int>).GetMethod(nameof(List <int> .Add)), Expression.Constant(1)) }))); }
protected override MemberListBinding VisitMemberListBinding(MemberListBinding node) { var a = Visit(node.Initializers, VisitElementInit); var inits = (IList <ElementInit>)a; var n = node.Initializers.Count; if (Pop(n, out var ess) && CanEvaluate(node.Member)) { _tilingState.Push(true); } else { _tilingState.Push(false); inits = Reduce(inits, ess); } return(node.Update(inits)); }
/// <summary> /// Visits the children of the <see cref="MemberListBinding" />. /// </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 MemberListBinding VisitMemberListBinding(MemberListBinding node) { return(node.Update(Visit(node.Initializers, VisitElementInit))); }
protected override MemberListBinding VisitMemberListBinding(MemberListBinding node) { return(node.Update(node.Initializers.Select(o => o.Update(o.Arguments.Select(VisitInternal))))); }
protected override MemberListBinding VisitMemberListBinding(MemberListBinding node) { var initializers = VisitElementInitializerList(node.Initializers); return(node.Update(node.Member, initializers)); }
/// <summary> /// 访问 <see cref="MemberListBinding"/>。 /// </summary> /// <param name="binding"></param> /// <returns></returns> protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding) { var initializers = VisitElementInitializerList(binding.Initializers); return(binding.Update(binding.Member, initializers)); }
protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding) { return(binding.Update(binding.Initializers.Select(i => VisitElementInit(i)))); }
protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding node, Type expectedType) => node.Update(Visit(node.Initializers, init => null, VisitElementInit));