反射 模板赋值 可为空的值类型

 class Program
    {
        static void Main(string[] args)
        {

            string prefix = "td_";
            TestClass t = new TestClass();
            t.Str = "SSSTTTRRR";
            t.Str2 = "SSSTTTRRR222";
            //t.Num = 55;
            //t.Time = DateTime.Now;

            TestClass2 t2 = new TestClass2();
            Show(t2);
            t2 = Evaluation(t2, prefix, t) as TestClass2;
            Show(t2);
            System.Console.Read();
        }

        /// <summary>
        /// 模板赋值
        /// </summary>
        /// <param name="BaseClass">一般就是数据库里的数据类,带前缀的</param>
        /// <param name="prefix">前缀</param>
        /// <param name="DataClass">就是提供数据的类</param>
        public static object Evaluation(object baseObject, string prefix, object data)
        {
            Type DataClass = data.GetType();
            Type BaseClass = baseObject.GetType();
            PropertyInfo[] propertyinfos = DataClass.GetProperties();
            PropertyInfo[] propertyinfos2 = BaseClass.GetProperties();
            foreach (var p in propertyinfos)
            {
                object value = p.GetValue(data, null);
                string name = p.Name;

                foreach (var p2 in propertyinfos2)
                {
                    if (p2.Name == prefix + name)
                    {
                        string ty = p2.PropertyType.Name.ToString();
                        if (ty == "String")
                            value = value.ToString();
                        else if (ty == "Int32")
                            value = Convert.ToInt32(value);
                        else if (ty == "Single")
                            value = Convert.ToSingle(value);
                        else if (ty == "Double")
                            value = Convert.ToDouble(value);
                        else if (ty == "DateTime")
                            value = Convert.ToDateTime(value);
                        else if (ty == "Decimal")
                            value = Convert.ToDecimal(value);
                        p2.SetValue(baseObject, value, null);
                    }
                }
            }
            return baseObject;
        }
        public static void Show(object o)
        {
            Type type = o.GetType();

            PropertyInfo[] myproperties = type.GetProperties();
            foreach (var p in myproperties)
            {
                object value = p.GetValue(o, null);
                string cla = p.PropertyType.Name.ToString();
                Console.WriteLine("Name:" + p.Name + "    Value:" + value + "   Attributes:" + cla);
            }

            Console.WriteLine("----------------------------------");
        }
    }
    public class TestClass
    {
        public TestClass()
        {
            Str = "Strss";
            Str2 = "Str2ss";
            lists.Add(5);
            lists.Add(8);
        }

        public string Str { get; set; }
        public string Str2 { get; set; }
        public int? Num { get; set; }
        public DateTime? Time { get; set; }
        public List<int> lists = new List<int>();

    }

    public class TestClass2
    {
        public TestClass2()
        {
        }
        public int num;
        public DateTime dt;
        public string td_Str { get; set; }
        public string td_Str2 { get; set; }
        public int? td_Num { get; set; }
        public DateTime? td_Time { get; set; }
    }

string 居然还是string

 

   class Program
    {
        static void Main(string[] args)
        {

            string prefix = "td_";
            TestClass t = new TestClass();
            t.Str = "SSSTTTRRR";
            t.Str2 = "SSSTTTRRR222";
            t.Num = 55;
            t.Time = DateTime.Now;
            t.fl = 2.3f;
            t.d = 23.44d;

            TestClass2 t2 = new TestClass2();
            Show(t2);
            t2 = Evaluation(t2, prefix, t) as TestClass2;
            Show(t2);
            System.Console.Read();
        }

        /// <summary>
        /// 模板赋值
        /// </summary>
        /// <param name="BaseClass">一般就是数据库里的数据类,带前缀的</param>
        /// <param name="prefix">前缀</param>
        /// <param name="DataClass">就是提供数据的类</param>
        public static object Evaluation(object baseObject, string prefix, object data)
        {
            Type DataClass = data.GetType();
            Type BaseClass = baseObject.GetType();
            PropertyInfo[] propertyinfos = DataClass.GetProperties();
            PropertyInfo[] propertyinfos2 = BaseClass.GetProperties();
            foreach (var p in propertyinfos)
            {
                object value = p.GetValue(data, null);
                string name = p.Name;
                if (value == null) break;  //默认值时就不进行赋值
                foreach (var p2 in propertyinfos2)
                {
                    if (p2.Name == prefix + name)
                    {
                        string ty = p2.PropertyType.FullName.ToString();
                        if (ty.Contains("System.String"))
                            value = value.ToString();
                        else if (ty.Contains("System.Int32"))
                            value = Convert.ToInt32(value);
                        else if (ty.Contains("System.Single"))
                            value = Convert.ToSingle(value);
                        else if (ty.Contains("System.Double"))
                            value = Convert.ToDouble(value);
                        else if (ty.Contains("System.DateTime"))
                            value = Convert.ToDateTime(value);
                        else if (ty.Contains("System.Decimal"))
                            value = Convert.ToDecimal(value);
                        p2.SetValue(baseObject, value, null);
                    }
                }
            }
            return baseObject;
        }
        public static void Show(object o)
        {
            Type type = o.GetType();

            PropertyInfo[] myproperties = type.GetProperties();
            foreach (var p in myproperties)
            {
                object value = p.GetValue(o, null);
                string cla = p.PropertyType.Name.ToString();
                Console.WriteLine("Name:" + p.Name + "    Value:" + value + "   Attributes:" + cla);
            }

            Console.WriteLine("----------------------------------");
        }
    }
    public class TestClass
    {
        public TestClass()
        {
            Str = "Strss";
            Str2 = "Str2ss";
            lists.Add(5);
            lists.Add(8);
        }

        public string Str { get; set; }
        public string Str2 { get; set; }
        public int? Num { get; set; }
        public float? fl { get; set; }
        public double? d { get; set; }
        public DateTime? Time { get; set; }
        public List<int> lists = new List<int>();

    }

    public class TestClass2
    {
        public TestClass2()
        {
        }
        public string td_Str { get; set; }
        public string td_Str2 { get; set; }
        public int? td_Num { get; set; }
        public int? td_fl { get; set; }
        public int? td_d { get; set; }
        public DateTime? td_Time { get; set; }
    }

fl,d有值时都被强制转换成int类型

string ty = p2.PropertyType.FullName.ToString();
td_fl类型为
System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
所以用Contains
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值