博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射由浅入深了解学习(二)
阅读量:5894 次
发布时间:2019-06-19

本文共 3475 字,大约阅读时间需要 11 分钟。

 一,反射对实体的操作,如下代码:

UserModel

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Model{    public class UserModel    {        public int Id { get; set; }        public string Name { get; set; }        public string title;    }}
Program
using Model;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace ReflectionDemo{    class Program    {        static void Main(string[] args)        {            #region 实体            Type type = typeof(UserModel);            object obj = Activator.CreateInstance(type);            ///遍历获取对象属性和自动赋值            foreach (var item in type.GetProperties())            {                if (item.Name.Equals("Id"))                {                    item.SetValue(obj, 12);                }                if (item.Name.Equals("Name"))                {                    item.SetValue(obj, "Name");                }                Console.WriteLine("属性名--{0},值--{1}", item.Name, item.GetValue(obj));            }            foreach (var item in type.GetFields())            {                if (item.Name.Equals("title"))                {                    item.SetValue(obj, "title");                }                Console.WriteLine("字段名--{0},值--{1}", item.Name, item.GetValue(obj));            }            #endregion            Console.ReadKey();        }    }}

 输出结果:

二,实体反射的扩展(orm返回实体)

1,动态生成SQL数据库语句,orm反射返回实体核心思想,如下代码

using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ReflectionDemo{    public class DbHepler    {        private static string conStr = ConfigurationManager.AppSettings["DbCon"]; //用的是sql数据库,数据库链接        public static T Query
(int id) { Type type = typeof(T); foreach (var item in type.GetProperties()) { ///输出属性名 Console.WriteLine("属性名--{0}", item.Name); } //通过属性名凭借数据库列 string colums = string.Join(",", type.GetProperties().Select(m => $"[{m.Name}]")); string sql = $"select {colums} from {type.Name} where id=@id"; IEnumerable
parameters = new List
() { new SqlParameter("@id",id), }; using (SqlConnection con = new SqlConnection(conStr)) { SqlCommand sqlCommand = new SqlCommand(sql, con); sqlCommand.Parameters.AddRange(parameters.ToArray()); con.Open(); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection); //判断是否为空,为空就返回默认类型 if (sqlDataReader.Read()) { ///根据类型创建实例 T t = (T)Activator.CreateInstance(type); foreach (var item in type.GetProperties()) { //根据属性给实例赋值 item.SetValue(t, sqlDataReader[item.Name]); } ///返回创建的实例 return t; } else { return default(T); } } } }}

 

转载于:https://www.cnblogs.com/May-day/p/10868375.html

你可能感兴趣的文章
云计算时代的运维
查看>>
DT系统开发之-文件结构目录
查看>>
Android Looper简介
查看>>
关于left join 的几点总结
查看>>
oracle job的创建和删除
查看>>
阿里年薪50w+的顶尖p7专家,只因做到了这几点
查看>>
我体会过发传单的辛苦,所以就必须接别人派的传单?
查看>>
自动化运维Ansible之playbook剧本的使用
查看>>
【PHP】创蓝253云通信平台国际短信接口调用demo案例
查看>>
Confluence 6 重要缓存和监控
查看>>
Day 30 shell 编程
查看>>
静态路由和默认路由
查看>>
谈一谈Spring-Mybatis在多数据源配置上的坑
查看>>
2.1 shell语句
查看>>
【精益生产】车间现场管理的八大浪费
查看>>
springMVC国际化
查看>>
变频电源内部的元器件是有着什么样的发挥和作用
查看>>
hadoop+spark+scala环境--单实例版
查看>>
数组排序_冒泡排序、选择排序、快速排序
查看>>
mybatis写xml时注意事项
查看>>