string result = GetProperties(model);
string value = GetPropertyValue(model, "user_name");
2、实体类
public class User
public string user_name { get; set; }
public string nick_name { get; set; }
public string password { get; set; }
3、PropertyInfo 获取实体类的所有属性和值
public string GetProperties<T>(T t)
string tStr = string.Empty;
if (t == null)
return tStr;
PropertyInfo[] properties = t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
if (properties.Length <= 0)
return tStr;
foreach (PropertyInfo item in properties)
string name = item.Name;
object value = item.GetValue(t, null);
if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String"))
tStr += string.Format("{0}:{1},", name, value);
GetProperties(value);
return tStr;
4、PropertyInfo 获取实体类指定属性值
public string GetPropertyValue<T>(T t, string field)
string value = "9";
if (t == null)
return value;
PropertyInfo[] properties = t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
if (properties.Length <= 0)
return value;
var property = properties.Where(x => x.Name == field).FirstOrDefault();
value = property.GetValue(t, null).ToString();
return value;
5、类型判断
propertyInfo.PropertyType != typeof(int)
propertyInfo.PropertyType != typeof(double)
propertyInfo.PropertyType != typeof(DateTime?)
private readonly TestDbContext _context;
public ReportsService(TestDbContext context)
_context = context;
public IEnumerable<TestDto> Get()
_context.ExecuteProc<TestDto>("存储过程名称", 参数);
public static IEnumerable<TElement> ExecuteProc<TElement>(this TestDbContext db, string sql, params object[] parameters) where TElement : new()
var connection = db.Database.GetDbConnection();
using (var cmd = connection.CreateCommand())
db.Database.OpenConnection();
cmd.CommandText = sql;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddRange(parameters);
var dr = cmd.ExecuteReader();
var columnSchema = dr.GetColumnSchema();
var data = new List<TElement>();
while (dr.Read())
TElement item = new TElement();
Type type = item.GetType();
foreach (var kv in columnSchema)
var propertyInfo = type.GetProperty(kv.ColumnName);
if (kv.ColumnOrdinal.HasValue && propertyInfo != null)
if (kv.ColumnName == "COLLECTOR_CODE")
var value = dr.IsDBNull(kv.ColumnOrdinal.Value) ? null : dr.GetValue(kv.ColumnOrdinal.Value);
if (value == null)
if (!string.IsNullOrEmpty(value.ToString())
&& propertyInfo.PropertyType != typeof(int)
&& propertyInfo.PropertyType != typeof(double)
&& propertyInfo.PropertyType != typeof(DateTime?))
value = value.ToString();
propertyInfo.SetValue(item, value);
data.Add(item);
dr.Dispose();
return data;
*
*
*
代码如下:
Type t = tc.GetType();//获得该类的Type
//再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了
foreach (PropertyInfo pi in t.GetProperties())
object value1 = pi.GetValue(tc, null));//用pi.GetValue获得值
string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来
本文主要介绍.NET Core(C#)中,使用反射进行类(class)的属性(PropertyInfo)、字段(FieldInfo)和方法(MethodInfo)相关操作,通过扩展方法编写的工具类,以及相关示例代码。
原文地址:.NET Core(C#) 反射类的属性(PropertyInfo)、字段(FieldInfo)和方法(MethodInfo)相关操作扩展方法工具类
注意:若不动态转换属性的值,简单调用SetValue方法赋值经常出错!特别是日期类型、带符号的数字类型等。
解决方案:
通过TypeDescriptor.GetConverter方法获取对应数值类型的转换器,然后调用ConvertFromString方法进行转换。
/// <summary>
/// 通过.NET反射动态调用SetValue方法给属性PropertyInfo赋值
/// </summary>
/// <param name="obj">对象实例</p
用索引化属性的可选索引值设置指定对象的该属性值。
public virtual void SetValue (object obj, object value, object[] index);
obj Object
将设置其属性值的对象。
value Object
新的属性值。
index Object[]
索引化属性的可选索...
敲代码遇到一个问题,因为之前瞧的机房系统的组合查询功能有许多的数据需要赋值给实体,如果一个一个赋值,这样会导致产生许多相似的代码,就会不符合封装的要求,所以到网上查找之后,找到propertyinfo。
属性定义:它提供灵活的机制来读取、编写或计算某个私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。 这使得可以轻松访问数据,此外还有助于提高方法的安全性和...
1、引入命名空间:System.Reflection;程序集:mscorlib(在mscorlib.dll中)
2、示例代码(主要是getType()、setValue()、getValue()方法):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
usi...
众所周知,C#反射Type类可以获取到字段信息(FieldInfo)及属性信息(PropertyInfo),他们的基类是MemberInfo。
那么问题来了,再FieldInfo和Property Info中有一个方法为GetValue(Object obj),可以获取引用对象下的具备该字段/属性的值,最近就遇到了问题需要反射中来判断是否引用的同一对象,那么这个GetValue返回的到底是原来成...
用索引化属性的可选索引值设置指定对象的python基础教程该属性值。
public virtual void SetValue (object obj, object value, object[] index);
obj Object
将设置其属性值的对象。
value Object
新的属性值。
index Object[]
索引化属性的可选索引值。 对于非索引化属性,该值应为 null。
SetValue(Object, Ob
在交互式监视模式下启动测试运行程序。 有关更多信息,请参见关于的部分。
yarn build
构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。
最小化构建,文件名包含哈希。 您的应用已准备好进行部署!
有关更多信息,请参见有关的部分。
yarn eject
注意:这是单向操作。 eject ,您将无法返回!
如果您对构建工具和配置选择不满意,则可以随时eject 。 此命令将从项目中删除单个构建依赖项。
相反,它将所有配置文件和传递依赖项(webpack,Babel,ESL
public string name { get; set; }
public string gender { get; set; }
public string age { get; set; }
//实例化类,并给实列化对像的属性赋值:
User u = new User();
u.name = ahbool;
u.gender = 男;
//输出此类的所有属性名和属
/// 属性要修改的值
public int ModifyBy(Expression<Func> whereLambda, string[] propertyNames, object[] perpertyValues)
//1.查询要修改的对象集合
var list = db.Set().Where(whereLambda).ToList();
//2.获取 要修改对象 的类型属性
Type t = typeof(T);
//3.循环 要修改的 实体对象,并根据 要修改的属性名 修改对象对应的属性值
foreach (var item in list)
//循环 要修改的属性 名称, 并 反射取出 t 中的 属性对象
for (int index = 0; index < propertyNames.Length;index++ )
//获取要修改的属性名
string pName = propertyNames[index];
//获取属性对象
PropertyInfo pi = t.GetProperty(pName);
发现属性 (Property) 的属性 (Attribute) 并提供对属性 (Property) 元数据的访问。
1.如何获取?
Type.GetProperty(String) 获取该类的指定的名字String公开的属性,如果私有会为空
Type.GetProperty(String,BindingFlags) 获取该类的指定的名字String和指定类型BindingFlags的属性
Type.GetProperties() 获取该类的所有公开属性
Type.GetProperties(Bind