泛型约束和利用反射修改对象属性的值

周日了都,昨天休息了一天,今天想想得敲敲代码练习一下,如下关于泛型约束和利用反射修改对象属性的值的,

都挺简单的,呵呵,但时间一长,不经常使用还容易忘记在此就当记录一下了,

首先泛型代码一般是如下的情形:

加了泛型约束,只允许引用类型并且是只能是无参数的构造函数的类型才能传入,也就是不允许给类构造参数传递实参,否则将报错。

错误 1 “XXXXXX.pros”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“

 1    public static T GetObject<T>(T Object) where T:class,new ()
 2         {
 3             string temp = string.Empty;
 4             System.Reflection.PropertyInfo[] propertyinfo = Object.GetType().GetProperties();
 5             foreach (System.Reflection.PropertyInfo p in propertyinfo)
 6             {
 7                 if (p.PropertyType == typeof(string))
 8                 {
 9                     temp = p.GetValue(Object, null).ToString();
10                     p.SetValue(Object, temp + temp.Length, null);
11                 }
12             }
13             return Object;
14
15         }

那解决办法就是在类中显示声明无参构造函数

 1   class pros
 2     {
 3         public pros(string  s) {
 4
 5
 6             Console.WriteLine(s);
 7         }
 8         public pros() { }//无参构造函数
 9
10         public string demoStr { set; get; }
11     }
12     class Program
13      {
14         static void Main(string[] args)
15         {
16
17
18
19             pros pro = new pros("s") { demoStr = "ss" };
20             pros p = GetObject(pro);
21             Console.WriteLine(p.demoStr);
22
23             Console.ReadKey(true);
24
25         }
26
27         public static T GetObject<T>(T Object) where T:class,new ()
28         {
29             string temp = string.Empty;
30             System.Reflection.PropertyInfo[] propertyinfo = Object.GetType().GetProperties();
31             foreach (System.Reflection.PropertyInfo p in propertyinfo)
32             {
33                 if (p.PropertyType == typeof(string))
34                 {
35                     temp = p.GetValue(Object, null).ToString();
36                     p.SetValue(Object, temp + temp.Length, null);
37                 }
38             }
39             return Object;
40
41         }
42      }

时间: 2025-01-14 02:03:12

泛型约束和利用反射修改对象属性的值的相关文章

C#利用反射获取对象属性值

public static string GetObjectPropertyValue<T>(T t, string propertyname){     Type type = typeof(T); PropertyInfo property = type.GetProperty(propertyname); if (property == null) return string.Empty; object o = property.GetValue(t, null); if (o == n

如何通过反射修改私有属性的值,附代码

在Java中使用反射修改私有属性 Integer a = Integer.valueOf(1); // TODO Field f = a.getClass().getDeclaredField("value"); f.setAccessible(true); f.set(a,2); System.out.println(a.intValue()); // 输出2 参考链接 https://blog.csdn.net/tabactivity/article/details/5072635

java 利用反射修改对象中的list类型字段中的值。

这两天没事学习下了反射.通过反射我们可以修改对象中的字段的值. 就如下面这段代码 Grade grade=new Grade(); Field f=Grade.class.getDeclaredField("name"); f.setAccessible(true); f.set(grade, "三年级一班"); 这是so easy的,这时我想到了要是list类型的字段该怎么通过反射修改呢. 于是我就尝试了下,最终做了出来. 先准备两个类. public class

C#利用反射检查对象属性是否满足正则特性

有时对象的属性需要满足某些正则,若是单独创建方法去一个个验证这些正则太过麻烦,这时我们可以给属性添加正则特性,如下: public class student { [RegularExpression(@"^[a-zA-Z]{1,20}$", ErrorMessage = "英文姓名必须是英文字符,且长度小于20!")] public string EName { get; set; } } 可是有时候对象实例的生成会绕过这些正则检查,例如直接从Excel里数据流写

利用反射机制获取属性的值遇到的坑

类: public Class Test { public string name; public string value; } Test t=new Test(); t.name="abc"; t.value="123"; string str=(string)t.GetType().GetProperty("name").GetValue(t,null); 找了3个小时,都找不出问题在哪里,由于这是我自己写的类,所以我就怀疑是不是类有问题,

junit测试时利用反射改变私有属性的值

/** filingTextLoadFareClassRefileProcessor */ @Autowired @Qualifier("filingTextLoadFareClassRefileProcessor") private transient FilingTextLoadFareClassRefileProcessor filingTextLoadFareClassRefileProcessor; final Field batchSize = FilingTextLoad

C#利用反射来判断对象是否包含某个属性的实现方法

本文实例展示了C#利用反射来判断对象是否包含某个属性的实现方法,对于C#程序设计人员来说有一定的学习借鉴价值. 具体实现代码如下: 1 /// <summary> 2 /// 利用反射来判断对象是否包含某个属性 3 /// </summary> 4 /// <param name="instance">object</param> 5 /// <param name="propertyName">需要判断的

[C#]利用反射来判断对象是否包含某个属性

关键代码: /// <summary> /// 利用反射来判断对象是否包含某个属性 /// </summary> /// <param name="instance">object</param> /// <param name="propertyName">需要判断的属性</param> /// <returns>是否包含</returns> public static

Java利用反射访问对象的私有成员

当我们使用反射为java对象的全部字段逐一赋值的时候,私有字段是不允许直接访问的. 在java.lang.reflect当中,有几个比较实用的API可以解决: getDeclaredFields() :获得所有访问级别的字段 setAccessible(boolean flag): 修改类成员的可访问性 下面以一个JavaBean 对象 转 DBObject 对象的方法为例: public static DBObject bean2DbObject(DBObject dbObject, PicI