Пример #1
0
            public override ListValue Apply(AnyValue value, Neo4jTypes.AnyType innerType, DbAccess access)
            {
                //Fast route
                if (innerType == NTAny)
                {
                    return(FastListConversion(value));
                }

                //slow route, recursively convert the list
                if (!(value is SequenceValue))
                {
                    throw CantCoerce(value, "List");
                }
                SequenceValue listValue    = ( SequenceValue )value;
                Coercer       innerCoercer = _converters[innerType.GetType()];

                AnyValue[]         coercedValues = new AnyValue[listValue.Length()];
                Neo4jTypes.AnyType nextInner     = nextInner(innerType);
                if (listValue.IterationPreference() == RANDOM_ACCESS)
                {
                    for (int i = 0; i < coercedValues.Length; i++)
                    {
                        AnyValue nextItem = listValue.Value(i);
                        coercedValues[i] = nextItem == NO_VALUE ? NO_VALUE : innerCoercer(nextItem, nextInner, access);
                    }
                }
                else
                {
                    int i = 0;
                    foreach (AnyValue anyValue in listValue)
                    {
                        AnyValue nextItem = listValue.Value(i);
                        coercedValues[i++] = nextItem == NO_VALUE ? NO_VALUE : innerCoercer(anyValue, nextInner, access);
                    }
                }
                return(VirtualValues.list(coercedValues));
            }
Пример #2
0
        private AnyValue CoerceTo(AnyValue value, DbAccess access, Neo4jTypes.AnyType types)
        {
            Coercer function = _converters[types.GetType()];

            return(function(value, types, access));
        }