Example #1
0
    /// <summary>
    /// Tの情報をロードします。
    /// setterには列番号をキーとしたsetメソッドが格納されます。
    /// </summary>
    private void LoadType()
    {
        Type type = typeof(T);
        // Field, Property のみを対象とする
        var memberTypes = new MemberTypes[] { MemberTypes.Field, MemberTypes.Property };
        // インスタンスメンバーを対象とする
        BindingFlags flag = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

        foreach (MemberInfo member in type.GetMembers(flag).Where((member) => memberTypes.Contains(member.MemberType)))
        {
            CsvColumnAttribute csvColumn = GetCsvColumnAttribute(member);
            if (csvColumn == null)
            {
                continue;
            }
            int    columnIndex  = csvColumn.ColumnIndex;
            object defaultValue = csvColumn.DefaultValue;
            if (member.MemberType == MemberTypes.Field)
            {
                // field
                FieldInfo fieldInfo = type.GetField(member.Name, flag);
                setters [columnIndex] = (target, value) =>
                                        fieldInfo.SetValue(target, GetConvertedValue(fieldInfo, value, defaultValue));
            }
            else
            {
                // property
                PropertyInfo propertyInfo = type.GetProperty(member.Name, flag);
                setters [columnIndex] = (target, value) =>
                                        propertyInfo.SetValue(target, GetConvertedValue(propertyInfo, value, defaultValue), null);
            }
        }
    }
Example #2
0
        public MemberTypeMappingConfig WithType <T>() where T : Member
        {
            var memberType = typeof(T);

            if (MemberTypes.Contains(memberType))
            {
                throw new ArgumentException("Already exist");
            }
            MemberTypes.Add(memberType);
            return(this);
        }