internal override Expression VisitMemberInit(MemberInitExpression init) { MemberAssignmentAnalysis previous = null; foreach (MemberBinding binding in init.Bindings) { MemberAssignment memberAssignment = binding as MemberAssignment; if (memberAssignment != null) { MemberAssignmentAnalysis memberAssignmentAnalysis = Analyze(entity, memberAssignment.Expression); if (memberAssignmentAnalysis.MultiplePathsFound) { multiplePathsFound = true; return(init); } Exception ex = memberAssignmentAnalysis.CheckCompatibleAssignments(init.Type, ref previous); if (ex != null) { incompatibleAssignmentsException = ex; return(init); } if (pathFromEntity.Count == 0) { pathFromEntity.AddRange(memberAssignmentAnalysis.GetExpressionsToTargetEntity()); } } } return(init); }
internal Exception CheckCompatibleAssignments(Type targetType, ref MemberAssignmentAnalysis previous) { if (previous == null) { previous = this; return(null); } Expression[] expressionsToTargetEntity = previous.GetExpressionsToTargetEntity(); Expression[] expressionsToTargetEntity2 = GetExpressionsToTargetEntity(); return(CheckCompatibleAssignments(targetType, expressionsToTargetEntity, expressionsToTargetEntity2)); }