Beispiel #1
0
        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);
        }
Beispiel #2
0
 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));
 }