/// <summary>
        /// Generate IL for the setter.
        /// </summary>
        /// <param name="stubField">The proxy stub field.</param>
        /// <param name="dbKey">The database key of this property.</param>
        /// <param name="propMetadata">The type metadata for this property.</param>
        /// <param name="ilGenerator">The setter's IL generator.</param>
        private static void GenerateSetterIL(
            FieldInfo stubField,
            string dbKey,
            TypeMetadata propMetadata,
            ILGenerator ilGenerator)
        {
            // this._stub.
            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldfld, stubField);
            ilGenerator.Emit(OpCodes.Ldstr, dbKey);

            // this._stub.?(value).
            ilGenerator.Emit(OpCodes.Ldarg_1);
            propMetadata.CallStubSetter(ilGenerator);

            // return ?;
            ilGenerator.Emit(OpCodes.Ret);
        }
        /// <summary>
        /// Generate IL for SetElemAt method.
        /// </summary>
        /// <param name="elemTypeMetadata"></param>
        /// <param name="ilGenerator"></param>
        private static void GenerateSetElemAtIL(
            TypeMetadata elemTypeMetadata,
            ILGenerator ilGenerator)
        {
            // this._stub.
            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldfld, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetField("stub", BindingFlags.NonPublic | BindingFlags.Instance));

            // this.ElemPrefix(index).
            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldarg_1);
            ilGenerator.Emit(OpCodes.Call, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetMethod("GetElemDbKey", BindingFlags.NonPublic | BindingFlags.Instance));

            // this._stub.?Setter(elemPrefix, value).
            ilGenerator.Emit(OpCodes.Ldarg_2);
            elemTypeMetadata.CallStubSetter(ilGenerator);

            // return ?;
            ilGenerator.Emit(OpCodes.Ret);
        }