做项目的过程中需要动态为自定义强类型的属性赋值,但是有的属性是List,反射回来得到的对象怎么使用index呢?
参考
https://blog.csdn.net/chy_xfn/article/details/82421255
利用Property的“Count”和"Item"属性可以分别获取下标和对应的对象。
// 需要引用的命名空间
using System.Reflection;
using System;
public class Test
public Person person = new Person();
public Test()
person.country = "china";
Man man = new Man();
man.name = "张三";
man.sex = "男";
person.manList = new List<Man>();
person.manList.Add(man);
PrintMessage<Person>(person);
public static string PrintMessage<T>(T t)
printMsg.Clear();
printMsg.Append("\n"+t.ToString()+"\n{\n");
PrintInternal(t);
printMsg.Append("}\n");
return printMsg.ToString();
// 传入需要查询的数据结构体,通过反射打印其所有公共属性
private static void PrintInternal<T>(T t, string intervalStr = "")
// 通过泛型类T实例的Type获取所有公共属性
PropertyInfo[] infos = t.GetType().GetProperties();
foreach (PropertyInfo info in infos)
if (info != null)
// 判断属性类型是否为泛型类型,如:
// typeof(int).IsGenericType --> False
// typeof(List<int>).IsGenericType --> True
// typeof(Dictionary<int>).IsGenericType --> True
if (info.PropertyType.IsGenericType)
// 如List<Man>,返回类名Man
string className = info.PropertyType.GetGenericArguments()[0].Name;
printMsg.Append(" " + info.Name + ":\n");
// 获取该泛型属性值,返回一个列表,如List<Man>;
// 因为是反射返回的数据,无法直接转换为List使用,针对这种数据,反射机制对这种属性值提供了
// “Count”列表长度、“Item”子元素等属性;
object subObj = info.GetValue(t, null);
if (subObj != null)
// 获取列表List<Man>长度
int count=Convert.ToInt32(subObj.GetType().GetProperty("Count").GetValue(subObj,null));
for (int i = 0; i < count; i++)
printMsg.Append(intervalStr +" {\n");
// 获取列表子元素Man,然后子元素Man其实也是一个类,然后递归调用当前方法获取类Man的所有公共属性
object item=subObj.GetType().GetProperty("Item").GetValue(subObj,new object[]{i});
PrintInternal(item, " ");
printMsg.Append(intervalStr + " },\n");
else {
// 属性info,通过info.Name获取属性字段名,通过info.GetValue(t, null)获取值(返回obje类型需要自己转换)
printMsg.Append(intervalStr+" "+info.Name +":"+info.GetValue(t, null).ToString()+"\n");
public class Person{
public string country;
public List<Man> manList = new List<Man>();
public class Man{
public string name;
public string sex;
做项目的过程中需要动态为自定义强类型的属性赋值,但是有的属性是List,反射回来得到的对象怎么使用index呢?参考https://blog.csdn.net/chy_xfn/article/details/82421255利用Property的“Count”和"Item"属性可以分别获取下标和对应的对象。// 需要引用的命名空间using System.Reflection;u...
首先看一下泛型的基本语法
访问修饰符 返回
类型 泛型方法名 <T>(T 参数)1):无法在泛型方法内部给任何 T
类型创建实例的对象,因为在泛型方法内部不知道传进来的对象有哪些构造函数2):约束是对内部的!(对于泛型方法)约束也是会被继承的!3):给
泛型类 加
类型(引用
类型,
值类型)的约束:where T:class,new ( )遇到的问题:在写MongodbHelper
类的时候,为了能处理多种
类别,所以如下定义了该
类: 代码如下: public class MongodbHelper<T> { 。。。。。 }在该
类的实现中有如下操作: 代码如下:mongo.Connect();
本文以实例形式讲述了C#通过反射创建自定义泛型的实现方法,分享给大家供大家参考。具体如下:
比如有这样一个泛型:Demo.GenericsSimple<T> 我想要通过反射创建一个Demo.GenericsSimple<string>的实例可以通过下面的格式进行创建:
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(命名空间.User`形参数量N[[1形参类型全名,形参类型所在的程 序集名称],[2形参类型全名,形参类型所在的程序集名称],[3形参类型全名,形参类型所在的程序集名称]......
很久很久以前,有个需求是客户端需要将从服务器收到的数据结构体(通常是个自定义协议类)的详细日志打印出来。因为是准备写个通用方法,故是不能知道是具体哪个类、这个类里面有哪些属性的;所以我们无法直接将其转换为具体某个类来处理。这时就可以用反射机制来获取这个类的所有公共属性了。
关于反射api用法可以直接看官方文档,或者看我下面给出的代码;而今天写这篇文章的重点主要是如何输出内嵌List<T&g...
C#基础_
类型转换隐式(implicit)
类型转换不丢失精度的转换子
类向父
类的转换装箱显式(explicit)
类型转换有可能丢失精度(甚至发生错误)的转换 cast拆箱使用Convert
类ToString方法与各数据
类型的Parse / TryParse方法自定义
类型转换操作符
隐式(implicit)
类型转换
代码中不用明确告诉编译器,你要将一种
类型转换成另一种
类型,编译器会自动帮我们将这个
类型进行转换这种转换叫做隐式
类型转换
不丢失精度的转换
long
类型在内存当中是用八个字节64位储存他的数
值
代码一:父子关系,父实体赋值给子实体
public static TChild AutoCopy<TParent, TChild>(TParent parent) where TChild : TParent, new()
TChild child = new TChild();
var ParentType = typeof(TParent);
var P...
var typeList = typeof(List<>);
Type typeDataList = typeList.MakeGenericType(datatypeTarget.DataObjectType);
var vtData = typeDataList.InvokeMember(null,
...