反射及反射的高级应用

反射:(1)核心:动态操作程序集(根据元数据)

 

举例:

static void Main(string[] args)

{

   Do(new { Id=1,Name="Hello"});

   Console.ReadKey();

}

private static void Do(object p)

{

   //什么是反射

   //动态操作程序集(根据元数据)

   var props=p.GetType().GetProperties();

  

   foreach(var item in props)

   {

      Console.WriteLine(item.Name+"--"+item.GetValue(p));

   }

}

 

namespace 反射高级用法

{

    class Program

    {

        static void Main(string[] args)

        {

            using(SqlConnection connection =new SqlConnection(""))

            {

                using(SqlCommand command = connection.CreateCommand())

                {

                    command.CommandText = "";

                    connection.Open();

                    using(SqlDataReader reader = command.ExecuteReader())

                    {

                        if (reader.HasRows)

                        {

                            while (reader.Read())

                            {

                                Person p = MapEntity<Person>(reader);

                            }

                        }

                    }

                }

            }

            Console.ReadKey();

        }

        private static T MapEntity<T>(SqlDataReader reader)where T : new()

        {

            var props = typeof(T).GetProperties();

            var p = new T();

            foreach(var prop in props)

            {

                if (prop.CanWrite)

                {

                    //尝试根据属性名称获取reader中的值

                    //根据列名获取列序号

                    var index = reader.GetOrdinal(prop.Name);

                    //取值

                    var value = reader.GetValue(index);

                    //将值放入对象上

                    prop.SetValue(p, Convert.ChangeType(value, prop.PropertyType));

                }

            }

            return p;

        }

        class Person

        {

            public int Id { get; set; }

            public string Name { get; set; }

        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值