public static List <T> GetFieldData <T>(List <string[]> data) where T : ISExcel { FieldInfo[] fields = typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Instance); List <T> targetData = new List <T>(); try { Type type = typeof(T); for (int i = 0; i < data.Count; i++) { if (i == 0) //Ignore Row 0 and 1 { continue; } object obj = Activator.CreateInstance(type, true); for (int j = 0; j < fields.Length; j++) { try { Type phraseType = fields[j].FieldType; object value = null; string phraseValue = data[i][j].ToString(); if (phraseValue.Length == 0) { value = TDataConvert.Default(phraseType); } else { value = TDataConvert.Convert(phraseType, phraseValue); } fields[j].SetValue(obj, value); } catch (Exception e) { throw new Exception("Inner Info:|" + data[i + 1][j].ToString() + "|,Field:" + fields[j].Name + "|" + fields[j].FieldType.ToString() + ", Rows/Column:" + (i + 1).ToString() + "/" + (j + 1).ToString() + " Message:" + e.Message); } } T dataObject = (T)obj; dataObject.InitAfterSet(); targetData.Add(dataObject); } } catch (Exception e) { Debug.LogError("Excel|" + typeof(T).Name.ToString() + " Error:" + e.Message + e.StackTrace); } return(targetData); }
public static Dictionary <T, Y> GetFieldData <T, Y>(List <string[]> data) where T : struct where Y : struct, ISExcel <T> { Type valueType = typeof(Y); FieldInfo[] fields = valueType.GetFields(BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Instance); Dictionary <T, Y> targetData = new Dictionary <T, Y>(); try { for (int i = 1; i < data.Count; i++) //Ignore First Row { T key = TDataConvert.Convert <T>(data[i][0]); //First Column Use As Key object value = Activator.CreateInstance(valueType, true); for (int j = 0; j < fields.Length; j++) { Type phraseType = fields[j].FieldType; object fieldValue = null; string phraseValue = data[i][j + 1].ToString(); try { if (phraseValue.Length == 0) { fieldValue = TDataConvert.Default(phraseType); } else { fieldValue = TDataConvert.Convert(phraseType, phraseValue); } fields[j].SetValue(value, fieldValue); } catch (Exception e) { throw new Exception("Inner Info:|" + data[i][j + 1].ToString() + "|,Field:" + fields[j].Name + "|" + fields[j].FieldType.ToString() + ", Rows/Column:" + (i).ToString() + "/" + (j + 1).ToString() + " Message:" + e.Message); } } targetData.Add(key, (Y)value); } } catch (Exception e) { Debug.LogError("Excel|" + typeof(Y).Name.ToString() + " Error:" + e.Message + e.StackTrace); } return(targetData); }