private static void HandleArray()

in modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReflectiveActions.cs [272:445]


        private static void HandleArray(FieldInfo field, out BinaryReflectiveWriteAction writeAction,
            out BinaryReflectiveReadAction readAction, bool raw)
        {
            if (field.FieldType.GetArrayRank() > 1)
            {
                writeAction = raw
                    ? GetRawWriter<Array>(field, (w, o) => w.WriteObject(
                        o == null ? null : new MultidimensionalArrayHolder(o)))
                    : GetWriter<Array>(field, (f, w, o) => w.WriteObject(f,
                        o == null ? null : new MultidimensionalArrayHolder(o)));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadObject<object>())
                    : GetReader(field, (f, r) => r.ReadObject<object>(f));

                return;
            }

            var elemType = field.FieldType.GetElementType();
            Debug.Assert(elemType != null);

            if (elemType == typeof (bool))
            {
                writeAction = raw
                    ? GetRawWriter<bool[]>(field, (w, o) => w.WriteBooleanArray(o))
                    : GetWriter<bool[]>(field, (f, w, o) => w.WriteBooleanArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadBooleanArray())
                    : GetReader(field, (f, r) => r.ReadBooleanArray(f));
            }
            else if (elemType == typeof (byte))
            {
                writeAction = raw
                    ? GetRawWriter<byte[]>(field, (w, o) => w.WriteByteArray(o))
                    : GetWriter<byte[]>(field, (f, w, o) => w.WriteByteArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadByteArray())
                    : GetReader(field, (f, r) => r.ReadByteArray(f));
            }
            else if (elemType == typeof (sbyte))
            {
                writeAction = raw
                    ? GetRawWriter<sbyte[]>(field, (w, o) => w.WriteByteArray((byte[]) (Array) o))
                    : GetWriter<sbyte[]>(field, (f, w, o) => w.WriteByteArray(f, (byte[]) (Array) o));
                readAction = raw
                    ? GetRawReader(field, r => (sbyte[]) (Array) r.ReadByteArray())
                    : GetReader(field, (f, r) => (sbyte[]) (Array) r.ReadByteArray(f));
            }
            else if (elemType == typeof (short))
            {
                writeAction = raw
                    ? GetRawWriter<short[]>(field, (w, o) => w.WriteShortArray(o))
                    : GetWriter<short[]>(field, (f, w, o) => w.WriteShortArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadShortArray())
                    : GetReader(field, (f, r) => r.ReadShortArray(f));
            }
            else if (elemType == typeof (ushort))
            {
                writeAction = raw
                    ? GetRawWriter<ushort[]>(field, (w, o) => w.WriteShortArray((short[]) (Array) o))
                    : GetWriter<ushort[]>(field, (f, w, o) => w.WriteShortArray(f, (short[]) (Array) o));
                readAction = raw
                    ? GetRawReader(field, r => (ushort[]) (Array) r.ReadShortArray())
                    : GetReader(field, (f, r) => (ushort[]) (Array) r.ReadShortArray(f));
            }
            else if (elemType == typeof (char))
            {
                writeAction = raw
                    ? GetRawWriter<char[]>(field, (w, o) => w.WriteCharArray(o))
                    : GetWriter<char[]>(field, (f, w, o) => w.WriteCharArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadCharArray())
                    : GetReader(field, (f, r) => r.ReadCharArray(f));
            }
            else if (elemType == typeof (int))
            {
                writeAction = raw
                    ? GetRawWriter<int[]>(field, (w, o) => w.WriteIntArray(o))
                    : GetWriter<int[]>(field, (f, w, o) => w.WriteIntArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadIntArray())
                    : GetReader(field, (f, r) => r.ReadIntArray(f));
            }
            else if (elemType == typeof (uint))
            {
                writeAction = raw
                    ? GetRawWriter<uint[]>(field, (w, o) => w.WriteIntArray((int[]) (Array) o))
                    : GetWriter<uint[]>(field, (f, w, o) => w.WriteIntArray(f, (int[]) (Array) o));
                readAction = raw
                    ? GetRawReader(field, r => (uint[]) (Array) r.ReadIntArray())
                    : GetReader(field, (f, r) => (uint[]) (Array) r.ReadIntArray(f));
            }
            else if (elemType == typeof (long))
            {
                writeAction = raw
                    ? GetRawWriter<long[]>(field, (w, o) => w.WriteLongArray(o))
                    : GetWriter<long[]>(field, (f, w, o) => w.WriteLongArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadLongArray())
                    : GetReader(field, (f, r) => r.ReadLongArray(f));
            }
            else if (elemType == typeof (ulong))
            {
                writeAction = raw
                    ? GetRawWriter<ulong[]>(field, (w, o) => w.WriteLongArray((long[]) (Array) o))
                    : GetWriter<ulong[]>(field, (f, w, o) => w.WriteLongArray(f, (long[]) (Array) o));
                readAction = raw
                    ? GetRawReader(field, r => (ulong[]) (Array) r.ReadLongArray())
                    : GetReader(field, (f, r) => (ulong[]) (Array) r.ReadLongArray(f));
            }
            else if (elemType == typeof (float))
            {
                writeAction = raw
                    ? GetRawWriter<float[]>(field, (w, o) => w.WriteFloatArray(o))
                    : GetWriter<float[]>(field, (f, w, o) => w.WriteFloatArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadFloatArray())
                    : GetReader(field, (f, r) => r.ReadFloatArray(f));
            }
            else if (elemType == typeof (double))
            {
                writeAction = raw
                    ? GetRawWriter<double[]>(field, (w, o) => w.WriteDoubleArray(o))
                    : GetWriter<double[]>(field, (f, w, o) => w.WriteDoubleArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadDoubleArray())
                    : GetReader(field, (f, r) => r.ReadDoubleArray(f));
            }
            else if (elemType == typeof (decimal?))
            {
                writeAction = raw
                    ? GetRawWriter<decimal?[]>(field, (w, o) => w.WriteDecimalArray(o))
                    : GetWriter<decimal?[]>(field, (f, w, o) => w.WriteDecimalArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadDecimalArray())
                    : GetReader(field, (f, r) => r.ReadDecimalArray(f));
            }
            else if (elemType == typeof (string))
            {
                writeAction = raw
                    ? GetRawWriter<string[]>(field, (w, o) => w.WriteStringArray(o))
                    : GetWriter<string[]>(field, (f, w, o) => w.WriteStringArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadStringArray())
                    : GetReader(field, (f, r) => r.ReadStringArray(f));
            }
            else if (elemType == typeof (Guid?))
            {
                writeAction = raw
                    ? GetRawWriter<Guid?[]>(field, (w, o) => w.WriteGuidArray(o))
                    : GetWriter<Guid?[]>(field, (f, w, o) => w.WriteGuidArray(f, o));
                readAction = raw
                    ? GetRawReader(field, r => r.ReadGuidArray())
                    : GetReader(field, (f, r) => r.ReadGuidArray(f));
            }
            else if (elemType.IsEnum)
            {
                writeAction = raw
                    ? GetRawWriter(field, MthdWriteEnumArrayRaw, elemType)
                    : GetWriter(field, MthdWriteEnumArray, elemType);
                readAction = raw
                    ? GetRawReader(field, MthdReadEnumArrayRaw, elemType)
                    : GetReader(field, MthdReadEnumArray, elemType);
            }
            else
            {
                writeAction = raw
                    ? GetRawWriter(field, MthdWriteObjArrayRaw, elemType)
                    : GetWriter(field, MthdWriteObjArray, elemType);
                readAction = raw
                    ? GetRawReader(field, MthdReadObjArrayRaw, elemType)
                    : GetReader(field, MthdReadObjArray, elemType);
            }
        }