コード例 #1
0
        public void Visit(SpecParser.ParsedExpressionReference reference, ExpressionBuildState state)
        {
            reference.LeftOperand.Visit(this, state);
            state.Builder.Append(".");
            var targetType = typeData[state.ExpressionType];

            var memberMappings = targetType.Data.Members
                                 .Where(x => x.Dimensions != null)
                                 .ToDictionary(x => ((SpecParser.ParsedExpressionToken)x.Dimensions[0].Value).Value);

            var member = targetType.Data.Members.Single(x => x.VkName == reference.RightOperand.Value);

            string memberName;

            if (memberMappings.ContainsKey(member.VkName))
            {
                memberName = TypeGenerator.GetNameForElement(memberMappings[member.VkName]) + ".Length";
            }
            else
            {
                memberName = TypeGenerator.GetNameForElement(member);
            }

            state.Builder.Append(memberName);
            state.ExpressionType = member.Type;
        }