简单的数据写入结构

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;


    public class MyTable 
    {
        public float[] FloatArray;

        public String[] StringArray{ get; private set; }
    }

    namespace ShootCore
    {
        public abstract class WriteInfo 
        {
            public delegate object WriteCallBack(object target,String value,String[] values);
            public Type mBaseType{ get; private set; }
            private WriteCallBack mWriteCallBack;

            public WriteInfo(Type baseType, WriteCallBack callback) 
            {
                this.mBaseType = baseType;
                this.mWriteCallBack = callback;
            }

            protected object WriteAnyDataFromString(string content) 
            {
                object data = null;

                if (this.mBaseType.IsArray)
                {      
                    String[] results;
                    content = content.Trim(new char[] { ' ', '{', '}' });
                    if (this.mBaseType.Equals(typeof(string[])))
                    {
                        results = content.Split(new String[] { ";;;" }, StringSplitOptions.None);
                    }
                    else
                    {
                        results = content.Split(new char[] { ',' });
                    }

                    data = System.Activator.CreateInstance(mBaseType, results.Length);

                    data = this.mWriteCallBack(data, null, results); 
                }
                else
                {
                    data = System.Activator.CreateInstance(mBaseType);
                    data = this.mWriteCallBack(data, content, null);
                }
                return data;
            }

            public abstract void SetValue(object target,string content);

            public abstract object GetValue(object target);
        }

        public class WriteInfoForField : WriteInfo
        {
            private FieldInfo mFieldInfo;

            public WriteInfoForField(FieldInfo info, WriteInfo.WriteCallBack callback)
                : base(info.FieldType, callback)
            {
                mFieldInfo = info;
            }

            public override void SetValue(object target, string content)
            {
                mFieldInfo.SetValue(target, this.WriteAnyDataFromString(content));
            }

            public override object GetValue(object target) 
            {
                return mFieldInfo.GetValue(target);
            }
        }

        public class WriteInfoForProperty : WriteInfo
        {
            private PropertyInfo mFieldInfo;

            public WriteInfoForProperty(PropertyInfo info, WriteInfo.WriteCallBack callback)
                : base(info.PropertyType, callback)
            {
                mFieldInfo = info;
            }

            public override void SetValue(object target, string content)
            {
                mFieldInfo.SetValue(target, this.WriteAnyDataFromString(content));
            }

            public override object GetValue(object target)
            {
                return mFieldInfo.GetValue(target);
            }
        }

        class Global
        {
            static object WriteFloatArrayData(object target, String value, String[] values) 
            {
                float[] fa = (float[])target;

                for (int i = 0, max = fa.Length; i < max; ++i) 
                {
                    if (false == float.TryParse(values[i], out fa[i])) 
                    {
                        fa[i] = 0;
                    }
                }
                return fa;
            }

            static object WriteStringArrayData(object target, String value, String[] values)
            {
                String[] fa = (String[])target;
                Array.Copy(values,fa,fa.Length);
                return fa;
            }

            static void Main(string[] args)
            {
                FieldInfo floatArr = typeof(MyTable).GetField("FloatArray");

                PropertyInfo stringArr = typeof(MyTable).GetProperty("StringArray");

                WriteInfoForField wifFloat = new WriteInfoForField (floatArr, WriteFloatArrayData );

                WriteInfoForProperty wifString = new WriteInfoForProperty(stringArr, WriteStringArrayData);

                MyTable tt = new MyTable();

                wifFloat.SetValue(tt,"{0.0,0.1,0.2,0.3,0.04}");

                wifString.SetValue(tt,"{我是个;;;大老粗;;;也是个;;;文雅人;;;Over}");

                foreach (var val in tt.FloatArray) 
                {
                    Console.WriteLine("Float Value:{0}",val);
                }

                foreach (var val in tt.StringArray)
                {
                    Console.WriteLine("String Value:{0}", val);
                }
            }  
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值