コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="membersOrder">Defines the declaration order of each property and field (because it is not guaranteed by the typeof(T).GetMembers() method)</param>
        public DataTransformer(Func <Type, MemberInfo, int> membersOrder)
        {
            if (!DataType.IsPrimitiveType(typeof(T)) && typeof(T).IsClass && typeof(T).GetConstructor(new Type[] { }) == null)
            {
                throw new NotSupportedException(String.Format("Type '{0}' does not have a default constructor", typeof(T)));
            }

            MembersOrder = membersOrder;

            List <Type> list = new List <Type>();

            BuildSlotTypes(list, typeof(T), new HashSet <Type>());
            slotTypes = list.ToArray();

            if (slotTypes.Length == 0)
            {
                throw new ArgumentException(String.Format("No public read/write properties/fields available for mapping."));
            }

            Type     = DataTypeUtils.GetDataType(slotTypes);
            DataType = DataTypeUtils.FromPrimitiveTypes(slotTypes);

            LambdaToIData = CreateToIDataMethod();
            toIData       = LambdaToIData.Compile();

            LambdaFromIData = CreateFromIDataMethod();
            fromIData       = LambdaFromIData.Compile();
        }