Beispiel #1
0
        private void Check()
        {
            if (key.typeDecotrator != EDecotratorType.Int &&
                key.typeDecotrator != EDecotratorType.String &&
                key.typeDecotrator != EDecotratorType.Float)
            {
                throw new System.Exception(string.Format("Dictionary type is only support int/float/string, this key is {0}.", key.GetName()));
            }

            if (value.typeDecotrator == EDecotratorType.Dictionary)
            {
                throw new System.Exception("Dictionary value type is not support Dictionary.");
            }

            if (value.typeDecotrator == EDecotratorType.List)
            {
                TypeDecoratorList typeDecoratorList = value as TypeDecoratorList;
                if (typeDecoratorList.child.typeDecotrator != EDecotratorType.Int ||
                    typeDecoratorList.child.typeDecotrator != EDecotratorType.Float ||
                    typeDecoratorList.child.typeDecotrator != EDecotratorType.Bool ||
                    typeDecoratorList.child.typeDecotrator != EDecotratorType.String)
                {
                    throw new System.Exception("Dictionary value type is list, but the list child type is only support int/float/bool/string.");
                }
            }
        }
        private object[] GetItemValues(System.Type childRuntimeType)
        {
            TypeDecoratorList type = (decorator as TypeDecoratorList);

            if (null == type || string.IsNullOrEmpty(value))
            {
                return(new object[0]);
            }

            if (type.flag < 0)
            {
                throw new System.Exception(string.Format("value depth is overflow, max depth is 2"));
            }

            char split = type.flag == 0 ? Define.UserDefine.global.excel.splitFlag0 : Define.UserDefine.global.excel.splitFlag1;

            string[] str_values = value.Split(split);
            int      count      = str_values.Length;

            object[] obj_values = new object[count];

            TypeDecorator child = type.child;

            child.runtimeType = childRuntimeType;
            for (int i = 0; i < count; i++)
            {
                obj_values[i] = ValueAdapter.Adapter(str_values[i], child);
            }
            return(obj_values);
        }
Beispiel #3
0
        public override object GetValue()
        {
            TypeDecoratorList itemsDecorator = TypeAdapter.Adapter("[float]") as TypeDecoratorList;

            itemsDecorator.runtimeType = typeof(List <float>);
            itemsDecorator.ResetFlag(1);
            object       vs     = ValueAdapter.Adapter(value, itemsDecorator);
            List <float> realvs = vs as List <float>;

            BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
            object       v2    = Common.Utility.Reflection.CreateInstance(decorator.runtimeType);

            Common.Utility.Reflection.SetValue(decorator.runtimeType, "x", v2, realvs.Count > 0 ? realvs[0] : 0, flags);
            Common.Utility.Reflection.SetValue(decorator.runtimeType, "y", v2, realvs.Count > 1 ? realvs[1] : 0, flags);
            return(v2);
        }
        public override object GetValue()
        {
            TypeDecoratorList itemsDecorator = TypeAdapter.Adapter("[int]") as TypeDecoratorList;

            itemsDecorator.runtimeType = typeof(List <int>);
            itemsDecorator.ResetFlag(1);
            object     vs     = ValueAdapter.Adapter(value, itemsDecorator);
            List <int> realvs = vs as List <int>;
            int        r      = realvs.Count > 0 ? realvs[0] : 0;
            int        g      = realvs.Count > 1 ? realvs[1] : 0;
            int        b      = realvs.Count > 2 ? realvs[2] : 0;
            int        a      = realvs.Count > 3 ? realvs[3] : 255;

            BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
            object       Color = Common.Utility.Reflection.CreateInstance(decorator.runtimeType);

            Common.Utility.Reflection.SetValue(decorator.runtimeType, "r", Color, (float)r / 255f, flags);
            Common.Utility.Reflection.SetValue(decorator.runtimeType, "g", Color, (float)g / 255f, flags);
            Common.Utility.Reflection.SetValue(decorator.runtimeType, "b", Color, (float)b / 255f, flags);
            Common.Utility.Reflection.SetValue(decorator.runtimeType, "a", Color, (float)a / 255f, flags);
            return(Color);
        }