private List<ObjectGraphProperty> getProperties(Expression expression, DebugType shownType, BindingFlags flags) { List<ObjectGraphProperty> propertyList = new List<ObjectGraphProperty>(); foreach (MemberInfo memberProp in shownType.GetFieldsAndNonIndexedProperties(flags)) { if (memberProp.Name.Contains("<")) { // skip backing fields continue; } if (memberProp.DeclaringType != shownType) { // skip properties declared in the base type continue; } // ObjectGraphProperty needs an expression // to know whether it is expanded, and to evaluate Expression propExpression = expression.AppendMemberReference((IDebugMemberInfo)memberProp); // Value, IsAtomic are lazy evaluated propertyList.Add(new ObjectGraphProperty { Name = memberProp.Name, Expression = propExpression, Value = "", MemberInfo = memberProp, IsAtomic = true, TargetNode = null }); } return propertyList.Sorted(ObjectPropertyComparer.Instance); }
public static IEnumerable<TreeNode> LazyGetMembersOfObject(TreeNode parent, Expression expression, MemberInfo[] members) { List<TreeNode> nodes = new List<TreeNode>(); foreach(MemberInfo memberInfo in members) { string imageName; var image = ExpressionNode.GetImageForMember((IDebugMemberInfo)memberInfo, out imageName); var exp = new ExpressionNode(parent, image, memberInfo.Name, expression.AppendMemberReference((IDebugMemberInfo)memberInfo)); exp.ImageName = imageName; nodes.Add(exp); } nodes.Sort(); return nodes; }
public static IEnumerable<TreeNode> LazyGetMembersOfObject(Expression expression, MemberInfo[] members) { List<TreeNode> nodes = new List<TreeNode>(); foreach(MemberInfo memberInfo in members) { nodes.Add(new ExpressionNode(ExpressionNode.GetImageForMember((IDebugMemberInfo)memberInfo), memberInfo.Name, expression.AppendMemberReference((IDebugMemberInfo)memberInfo))); } nodes.Sort(); return nodes; }