コード例 #1
0
        Expression BuildBody(Expression owner, int index, MappingStrategy strategy, ConversionStep conversion)
        {
            if (index == sourcePropertyChain.Length - 1)
            {
                return(SetValue(strategy, conversion, owner));
            }

            if (nullableProperties.Contains(sourcePropertyChain[index]) == false)
            {
                return(BuildBody(Expression.Property(owner, sourcePropertyChain[index + 1]), index + 1, strategy, conversion));
            }
            var local      = Expression.Variable(owner.Type);
            var property   = new PropertyIfNotNullInnerExpression(Expression.Property(local, sourcePropertyChain[index + 1]));
            var body       = BuildBody(property, index + 1, strategy, conversion);
            var expression = new PropertyIfNotNullExpression(owner, body, local, TargetValueType);

            property.Owner = expression;
            return(expression);
        }
コード例 #2
0
        Expression VisitCustom(PropertyIfNotNullExpression node)
        {
            var member = node.Inner as MemberExpression;

            if (member != null)
            {
                Append(member.Member.Name);
            }
            var convert = node.Inner as UnaryExpression;

            if (convert != null && convert.NodeType == ExpressionType.Convert)
            {
                Visit(convert.Operand);
            }
            else
            {
                Visit(node.Inner);
            }
            return(node);
        }
コード例 #3
0
 void OutRightHandSideOf(PropertyIfNotNullExpression owner)
 {
     Visit(owner.Owner);
     Append("?!");
 }