/// <summary> /// 填写target的数据. /// </summary> /// <param name="fromType">target被解析为的类型, 它与target.GetType()不一定相同, 可能是该类型的基类</param> /// <param name="target">需要被填写的对象</param> /// <param name="paramArray">参数列表</param> /// <param name="paramIndex">参数列表的开始位置, 从该位置开始的内容被填写到target中</param> static private void loadLine(Type fromType, object target, WDBSheetLine paramArray, ref int paramIndex) { // 如果fromType有基类, 先读取基类的信息. if (fromType.BaseType != typeof(object)) { loadLine(fromType.BaseType, target, paramArray, ref paramIndex); } // 不读取static成员. System.Reflection.FieldInfo[] fields = fromType.GetFields( System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Instance ); foreach (System.Reflection.FieldInfo f in fields) { Type elementType = f.FieldType; int count = 1; // 如果该域是数组, 那么取数组长度和数组的元素类型. if (f.FieldType.IsArray) { count = ((object[])f.GetValue(target)).Length; elementType = f.FieldType.GetElementType(); } // object[] value = new object[count]; for (int i = 0; i < count; ++i) { // 如果是内置类型(string的IsPrimitive为false, 特殊处理). if (!elementType.IsPrimitive && (elementType != typeof(string))) { value[i] = Activator.CreateInstance(elementType); loadLine(elementType, value[i], paramArray, ref paramIndex); } else { if (paramIndex >= paramArray.m_Line.Length) { throw new Exception("文件中的列数和结构中定义的不一致"); } value[i] = paramArray.GetData(paramIndex++); } } // 拷贝数组到结果中. if (f.FieldType.IsArray) { Array.Copy(value, (Array)f.GetValue(target), count); } else { f.SetValue(target, value[0]); } } }
public object GetData(int index, int field) { WDBSheetLine data = this.GetData(index); if (data != null) { return(data.GetData(field)); } return(null); }
public T GetDataByNumber <T>(int row, int field) { WDBSheetLine dataByNumber = this.GetDataByNumber(row); if (dataByNumber != null) { return(dataByNumber.GetData <T>(field)); } return(createInstance <T>()); }
public object GetDataByNumber(int row, int field) { WDBSheetLine dataByNumber = this.GetDataByNumber(row); if (dataByNumber != null) { return(dataByNumber.GetData(field)); } return(null); }
private static object loadLine(WDBSheetLine line, object item, int keyIdx) { int index = 0; loadLine(item.GetType(), item, line, ref index); if (index != line.m_Line.Length) { throw new Exception("文件中的列数和结构中定义的不一致"); } return(line.GetData(keyIdx)); }
public override bool LoadConfig(int id) { WDBSheetLine line = CDataMgr.Item.GetData(id); if (line == null) { LKDebug.LogError("LoadConfig error: can't find " + id + " in Item table!"); return(false); } id_ = line.GetData <int>(WDB_Item.Id); name_ = line.GetData <string>(WDB_Item.Name); desc_ = line.GetData <string>(WDB_Item.Desc); body_ = line.GetData <string>(WDB_Item.Body); body_drop_ = line.GetData <string>(WDB_Item.Body_Drop); drop_effect_ = line.GetData <int>(WDB_Item.Drop_Effect); quality_ = line.GetData <int>(WDB_Item.Quality); bag_ = line.GetData <int>(WDB_Item.Bag); use_ = line.GetData <int>(WDB_Item.Use); autu_gein_ = line.GetData <int>(WDB_Item.AutuGein); stack_sum_ = line.GetData <int>(WDB_Item.StackSum); is_resolve_ = line.GetData <int>(WDB_Item.IsResolve); is_sold_ = line.GetData <int>(WDB_Item.IsSold); price_ = line.GetData <int>(WDB_Item.Price); is_affirm_sold_ = line.GetData <int>(WDB_Item.IsAffirmSold); icon_ = line.GetData <string>(WDB_Item.Icon); icon_type_ = line.GetData <int>(WDB_Item.IconType); function_ = line.GetData <int>(WDB_Item.Function); buff_id_ = line.GetData <int>(WDB_Item.BuffId); drop_ = line.GetData <int>(WDB_Item.Drop); trun_around_ = line.GetData <int>(WDB_Item.TrunAround); gain_effect_ = line.GetData <int>(WDB_Item.GainEffect); return(true); }