zoukankan      html  css  js  c++  java
  • 泛型约束和利用反射修改对象属性的值

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

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

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

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

    错误 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         }
    View Code

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

     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      }
    View Code
  • 相关阅读:
    初试Shell脚本
    iOS分类Category探索
    cocoaPods安装爬坑总结
    关于FFmpeg工具的使用总结
    关于Boost在工程下的配置
    关于Phabricator Arcanist以及提交项目代码
    关于visual studio的一些日常总结
    关于Python在Linux、Mac和Windows上的安装方法总结
    TextSwitcher 文本切换器的功能与用法
    Android必知必会-App 常用图标尺寸规范汇总
  • 原文地址:https://www.cnblogs.com/scien626/p/4492749.html
Copyright © 2011-2022 走看看