Example #1
0
    /// <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]);
            }
        }
    }
Example #2
0
    public object GetData(int index, int field)
    {
        WDBSheetLine data = this.GetData(index);

        if (data != null)
        {
            return(data.GetData(field));
        }
        return(null);
    }
Example #3
0
    public T GetDataByNumber <T>(int row, int field)
    {
        WDBSheetLine dataByNumber = this.GetDataByNumber(row);

        if (dataByNumber != null)
        {
            return(dataByNumber.GetData <T>(field));
        }
        return(createInstance <T>());
    }
Example #4
0
    public object GetDataByNumber(int row, int field)
    {
        WDBSheetLine dataByNumber = this.GetDataByNumber(row);

        if (dataByNumber != null)
        {
            return(dataByNumber.GetData(field));
        }
        return(null);
    }
Example #5
0
    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));
    }
Example #6
0
    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);
    }