/// <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); } } }
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); }