利用反射获取一个类实例的所有属性名称和值 拼接为字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射获取一个类实例的所有属性名称和值 拼接为字符串相关的知识,希望对你有一定的参考价值。
需要一个功能:获取一个类实例的所有属性名称和值并拼接为字符串,然后进行处理。代码保存在此以备后用。
建立一个类文件ClassToString.cs
以下代码可以直接使用,参数为一个类的实例,返回的是一个数组,[0]为属性名的拼接,[1]为属性Value的拼接.
对于类的属性类型没有限制,但是如果没有全部赋值的话,Value会范围默认值,
比如int为0,String为空,DateTime为0001/1/1 0:00:00,0,0,0
需要有需要的话可以在拼接的时候判断进行相应处理
ClassToString.cs代码如下:
using System; public class ClassToString { public ClassToString() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 把一个类的实例所有属性名称和值返回一个数组,【0】为名称,【1】为值,通过“,”进行分割组合 /// </summary> /// <typeparam name="T">类实例</typeparam> /// <param name="t">类实例</param> /// <returns></returns> public string[] ClassToArray<T>(T t) { string tStrName = string.Empty; string tStrValue = string.Empty; try { System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); foreach (System.Reflection.PropertyInfo item in properties) { string name = item.Name; object value = item.GetValue(t, null); if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) { tStrName += name + ","; tStrValue += value + ","; } else { ClassToArray(value); } } String[] StringNameValue = new String[] { tStrName.TrimEnd(‘,‘), tStrValue.TrimEnd(‘,‘) };//去除最后一个多余的“,” return StringNameValue; } catch (Exception e) { String[] StringNameValue = new String[] { "Error", e.ToString() }; return StringNameValue; } } }
使用实例:
首先是一个定义了属性的类
Product.cs代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Product 的摘要说明 /// </summary> public class Product { /// <summary> /// 商品ID /// </summary> private int _id; /// <summary> /// 商品品号 /// </summary> private string _num; /// <summary> /// 条形码 /// </summary> private int _barcode; /// <summary> /// 颜色/规格 /// </summary> private string _color; /// <summary> /// 单位 /// </summary> private string _unit; /// <summary> /// 箱/个 /// </summary> private int _smallUnit; /// <summary> /// 件/个 /// </summary> private int _largeUnit; /// <summary> /// 建议零售价 /// </summary> private float _price; /// <summary> /// 回收站标记 /// </summary> private int _isEnable; /// <summary> /// 添加时间 /// </summary> private DateTime _datetime; /// <summary> /// 备注 /// </summary> private string _remark; /// <summary> /// 最新成本 /// </summary> private float _cost; /// <summary> /// 数量 /// </summary> private int _number; /// <summary> /// 平均成本 /// </summary> private float _averageCost; /// <summary> /// 仓库库位 /// </summary> private int _wareHouse; /// <summary> /// 最后入库时间 /// </summary> private DateTime _lastCostTime; /// <summary> /// 商品总数量(此字段为查询数据库得到) /// </summary> private int _count; /// <summary> /// 单品总金额(此字段为查询数据库得到) /// </summary> private float _money; /// <summary> /// 全部商品总金额(此字段为查询数据库得到) /// </summary> private float _moneySum; public int Id { get { return _id; } set { _id = value; } } public string Num { get { return _num; } set { _num = value; } } public int Barcode { get { return _barcode; } set { _barcode = value; } } public string Color { get { return _color; } set { _color = value; } } public string Unit { get { return _unit; } set { _unit = value; } } public int SmallUnit { get { return _smallUnit; } set { _smallUnit = value; } } public int LargeUnit { get { return _largeUnit; } set { _largeUnit = value; } } public float Price { get { return _price; } set { _price = value; } } public int IsEnable { get { return _isEnable; } set { _isEnable = value; } } public DateTime Datetime { get { return _datetime; } set { _datetime = value; } } public string Remark { get { return _remark; } set { _remark = value; } } public float Cost { get { return _cost; } set { _cost = value; } } public int Number { get { return _number; } set { _number = value; } } public float AverageCost { get { return _averageCost; } set { _averageCost = value; } } public int WareHouse { get { return _wareHouse; } set { _wareHouse = value; } } public DateTime LastCostTime { get { return _lastCostTime; } set { _lastCostTime = value; } } public int Count { get { return _count; } set { _count = value; } } public float Money { get { return _money; } set { _money = value; } } public float MoneySum { get { return _moneySum; } set { _moneySum = value; } } public Product() { // // TODO: 在此处添加构造函数逻辑 // } }
调用:
Default.aspx.cs代码如下 实例中只赋值了部分属性,但输出的是完整的名称和值,如果只需要赋值的属性,可在拼接字符串的时候进行处理。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { public Product pd = new Product(); public string Name; public string Value; protected void Page_Load(object sender, EventArgs e) { pd.Id = 1; pd.Remark = "备注"; pd.Color = "红色"; ClassToString cts = new ClassToString(); string[] str=cts.ClassToArray(pd); Name = str[0]; Value = str[1]; } }
Default.aspx代码如下
<div> <%=Name+"<br/>"+Value %> </div>
效果
Id,Num,Barcode,Color,Unit,SmallUnit,LargeUnit,Price,IsEnable,Datetime,Remark,Cost,Number,AverageCost,WareHouse,LastCostTime,Count,Money,MoneySum 1,,0,红色,,0,0,0,0,0001/1/1 0:00:00,备注,0,0,0,0,0001/1/1 0:00:00,0,0,0
以上是关于利用反射获取一个类实例的所有属性名称和值 拼接为字符串的主要内容,如果未能解决你的问题,请参考以下文章