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; }