C#中类的属性的获取

时间:2023-02-17 11:41:52

/// <summary>
/// 将多个实体转换成一个DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable EntityToDataTable<T>(List<T> list)
{
DataTable dt = new DataTable();
string res = typeof(T).ToString();
int start = res.IndexOf('.') + 1;

//初始化DataTable的值 包括表名、列
dt.TableName = res.Substring(start, res.Length - start);
Dictionary<string, object> dic = Utils.GetAllAttributes<T>(list[0]);
if (dic==null||dic.Count==0)
{
throw new Exception("无法转换数据!");
}
foreach (string key in dic.Keys)
{
// Type type = dic[key].GetType();
dt.Columns.Add(key, dic[key].GetType());
}
foreach (T t in list)
{
dic = new Dictionary<string, object>();
dic = Utils.GetAllAttributes<T>(t);
List<object> lists = new List<object>();
foreach (object item in dic.Values)
{
lists.Add(item);
}
DataRow dr = dt.NewRow();
dr.ItemArray = lists.ToArray();
dt.Rows.Add(dr);
}

return dt;
}

/// <summary>
/// 获取实体的所有属性
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static Dictionary<string, object> GetAllAttributes<T>(T t)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
if (t == null)
{
return dic;
}
PropertyInfo[] infos = t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
if (infos == null || infos.Length <= 0)
{
return dic;
}
foreach (PropertyInfo info in infos)
{
string Name = info.Name;
object value = info.GetValue(t, null);
if (info.PropertyType.IsValueType || info.PropertyType.Name.StartsWith("String")||info.PropertyType.FullName.Contains("System"))
{
if (dic.ContainsKey(Name))
{
continue;
}
dic.Add(Name, value);
}
//else
//{
// GetAllAttributes(value);
//}
}
return dic;
}

C#中类的属性的获取的更多相关文章

  1. 采用异步来实现重新连接服务器或者重新启动服务 C&num;中类的属性的获取 SignalR2简易数据看板演示 C&num;动态调用泛型类、泛型方法 asp &period;net core Get raw request&period; 从壹开始前后端分离&lbrack;&period;NetCore 不定期更新&rsqb; 38 &boxV;自动初始化数据库

    采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...

  2. javascript中类的属性研究

    原文:javascript中类的属性研究 本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很 ...

  3. jq选择器(jq 与 js 互相转换),jq操作css样式 &sol; 文本内容, jq操作类名,jq操作全局属性&comma;jq获取盒子信息&comma;jq获取位置信息

    jq选择器(jq 与 js 互相转换) // 获取所有的页面元素jq对象 $('css3选择器语法'); var $box = $(".box:nth-child(1)"); 获取 ...

  4. java 反射机制--根据属性名获取属性值

    1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

  5. C&num; datagridview列绑定类中类的属性

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://www.cnblogs.com/linghaoxinpian/p/5906374. ...

  6. 特征列 属性值 获取 vowpal wabbit 生成DNN 的训练测试数据

    用户特征文件 userFeature.data 每 行 代 表 一 个 用 户 的 特 征 数 据, 格 式 为: “uid|features”,uid 和 features 用竖线“|”分隔.其中 ...

  7. Vue使用ref 属性来获取DOM

    注意,在父组件中可以使用this.$refs.属性名  获取任何元素的属性和方法,子组件不可以获取父组件中的 <!DOCTYPE html> <html lang="en& ...

  8. innerHTML 属性用于获取或替换 HTML 元素的内容。

    innerHTML 属性 innerHTML 属性用于获取或替换 HTML 元素的内容. 语法: Object.innerHTML 注意: 1.Object是获取的元素对象,如通过document.g ...

  9. Vue&period;js自定义标签属性并获取属性,及绑定img的src属性的坑

    一.定义属性: 一般定义属性都是为了动态的去获取属性的值,或者动态的设置属性的值,如果想仅仅是设置一个普通的属性,直接在便签上设置属性即可,就像使用html的title.name等属性一样,如< ...

随机推荐

  1. 【转】 Android WebView内容宽度自适应

    我们平常在项目中有可能会遇到网页的内容是通过json数据传递到app上面用WebView来显示的,这时候我们通常都要调整内容的总宽度不超过父容器的宽度,这样子用户可以不用左右滑动就可以看到全部的内容. ...

  2. mysql定义和调用存储过程

    /*定义delimiter为 // */ delimiter // CREATE procedure sp_add3(a int, b int,out c int) begin set c=a+ b; ...

  3. wwdc2016-session707 Notifications&lpar;draft&rpar;

    Introduction to Notificationshttps://developer.apple.com/wwdc2016/707 通知这哥们说话有点不清晰啊. 远程通知本地通知 可以被操作的 ...

  4. java开发微信公众平台备忘

    简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrl+shift+o 自动添加必要import空间及移除无用import 项目备忘+说明 1. ...

  5. delphi 怎么把image上的图片粘贴到剪切板上

    这个给你一个简单的代码,仅提供思路. uses Clipbrd; //引用单元 procedure TForm1.Button1Click(Sender: TObject); var Bmp: TBi ...

  6. HDU&lowbar;2156 分数矩阵

    Problem Description             我们定义如下矩阵:            1/1 1/2 1/3            1/2 1/1 1/2            1 ...

  7. mysql5&period;7在centos上安装的完整教程以及相关的&OpenCurlyDoubleQuote;坑”

    安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | gre ...

  8. 爬虫之验证码IP攻防心得——小总结

    小前言: 一般来说,现在很多平台注册.登录的时候会涉及到验证码,这样做的目的是为了防止恶意程序恶意访问,从而给服务器造成一定的压力,会浪费一定的资源,大家也都知道,现在这种短信平台,邮箱平台等都是收费 ...

  9. C&sol;S权限系统得到拼音和五笔的自定义函数(二)

    得到五笔: CREATE FUNCTION [dbo].[fun_getWB](@Str VARCHAR(2000)) RETURNS VARCHAR(2000) AS BEGIN DECLARE @ ...

  10. linux -- ubuntu 14&period;10开机出现错误&OpenCurlyDoubleQuote;Error found when loading &sol;root&sol;&period;profile”解决

    修改完root权限自动登录后,发现开机出现以下提示: Error found when loading /root/.profile stdin:is not a tty ………… 解决方法:在终端中 ...