using System; using System.Linq.Expressions; using System.Collections.Generic; public class Node { Node parent; public Node () { Values = new List (); } public string Name { get; set; } public Node Parent { get { return parent ?? new Node (); } set { parent = value; } } public List Values { get; set; } public static int Main () { Expression> e = () => new Node () { Parent = { Name = "Parent" } }; var mie = (MemberInitExpression) e.Body; if (mie.Bindings[0].BindingType != MemberBindingType.MemberBinding) return 1; e.Compile () (); e = () => new Node () { Values = { 1, 2, 3 } }; mie = (MemberInitExpression) e.Body; if (mie.Bindings[0].BindingType != MemberBindingType.ListBinding) return 2; e.Compile () (); e = () => new Node () { Parent = null }; mie = (MemberInitExpression) e.Body; if (mie.Bindings[0].BindingType != MemberBindingType.Assignment) return 3; e.Compile () (); e = () => new Node () { Values = { } }; mie = (MemberInitExpression) e.Body; if (mie.Bindings[0].BindingType != MemberBindingType.MemberBinding) return 4; e.Compile () (); e = () => new Node() { Parent = { Name = "Parent" }, Values = { 4, 5, 7, 8 } }; mie = (MemberInitExpression) e.Body; if (mie.Bindings[0].BindingType != MemberBindingType.MemberBinding) return 5; if (mie.Bindings[1].BindingType != MemberBindingType.ListBinding) return 6; e.Compile () (); Console.WriteLine ("ok"); return 0; } }