public static IEnumerable <T> Read <T>(string path, Map map, IInputDriver driver) where T : new() { var reader = driver.GetReader(path, null); List <Assignment> assignments = new List <Assignment>(); FieldInfo[] fields = typeof(T).GetFields(); foreach (FieldInfo field in fields) { MapAttribute attribute = (MapAttribute)field.GetCustomAttributes(typeof(MapAttribute), false).FirstOrDefault(); if (attribute != null) { Assignment assignment = null; var entries = map.Columns.Where(e => e.Value == field.Name); foreach (var entry in entries) { int index = reader.FirstRow.IndexOf(entry.Key); if (index >= 0) { assignment = new Assignment(index, field); break; } } if (assignment == null && attribute.Required) { throw new Exception("A \"" + field.Name + "\" mező nem található a térképben vagy a fájlban."); } else if (assignment != null) { Translation translation = null; if (map.Enums.ContainsKey(field.Name)) { translation = map.Enums[field.Name]; } assignment.Cast = Transform.ToType(field.FieldType, translation); assignments.Add(assignment); } } } foreach (var record in reader.Skip(1)) { T obj = new T(); foreach (var assignment in assignments) { assignment.Field.SetValue(obj, assignment.Cast(record[assignment.Index])); } yield return(obj); } reader.Dispose(); }
public static IEnumerable <T> Read <T>(string path, IInputDriver driver) where T : new() { var table = (TableAttribute)typeof(T).GetCustomAttributes(typeof(TableAttribute), false).First(); var fields = typeof(T).GetFields().Where(field => field.GetCustomAttributes(typeof(ColumnAttribute), true).Length > 0).OrderBy(field => ((ColumnAttribute)field.GetCustomAttributes(typeof(ColumnAttribute), true).First()).Number).ToArray(); var reader = driver.GetReader(path, table.Name); foreach (var row in reader.Skip(1)) { T item = new T(); for (int i = 0; i < fields.Length; ++i) { fields[i].SetValue(item, Transform.ToType(fields[i].FieldType)(row[i])); } yield return(item); } reader.Dispose(); }