软件编程
位置:首页>> 软件编程>> C#编程>> C# PropertyInfo类案例详解

C# PropertyInfo类案例详解

作者:-小龙人  发布时间:2021-12-11 16:47:45 

标签:C#,PropertyInfo

对一个对象进行属性分析,并得到相应的属性值,并判断属性的默认值以及空值


  public class People
  {
      public string name { get; set; }
      public int age { get; set; }
      public DateTime birthday { get; set; }
      public bool isActive { get; set; }
      public List<Address> address{get;set;}

}

public class Address
  {
      public string country { get; set; }
      public string province { get; set; }
      public string city { get; set; }
  }

class Program
  {      
      static void Main(string[] args)
      {
          List<Address> address = new List<Address>()
          {
              new Address(){
                  country="china",
                  province="anHui",
                  city="bengBu",
              },
              new Address(){
                  country="china",
                  city="shangHai",
              },
          };
          People people = new People()
          {
              name="wangqilong",
              age=23,
              birthday=Convert.ToDateTime("2018-09-15"),
              isActive=true,
              address=address
          };
          string str = method(people);
      }

public static string method(Object obj)
      {
          string str = "";

Type postType = obj.GetType();
          PropertyInfo[] postTypeInfos = postType.GetProperties(); //返回为当前 Type 的所有公共属性,PropertyInfo[] PropertyInfo 的所有公共属性的 Type 对象数组

foreach (PropertyInfo p in postTypeInfos)      
          {
              if (p.PropertyType.FullName == typeof(DateTime).FullName)
              {
                  DateTime pValue = (DateTime)p.GetValue(obj, null);
                  if (pValue != null && pValue != DateTime.MinValue)    //dateTime类型申明时默认值为最小值
                  {
                      str += p.Name + ":" + pValue + ";";
                  }
              }
              else if (p.PropertyType.FullName == typeof(Int32).FullName)
              {
                  int pValue = (int)p.GetValue(obj, null);
                  if (pValue != 0)                                //int类型申明时默认值为最小值0
                  {
                      str += p.Name + ":" + pValue + ";";
                  }
              }
              else if (p.PropertyType.FullName == typeof(Boolean).FullName)
              {
                  Object pValue = p.GetValue(obj, null);
                  str += p.Name + ":" + pValue + ";";
              }
              else if (p.PropertyType.FullName == typeof(String).FullName)
              {
                  Object pValue = p.GetValue(obj, null);
                  str += p.Name + ":" + pValue + ";";
              }
              //如果传入的对象包含集合,集合中是另个对象
              else if (p.PropertyType.FullName == typeof(List<Address>).FullName)
              {
                  List<Address> list = (List<Address>)p.GetValue(obj, null);
                  if (list != null)
                  {
                      foreach (Address address in list)
                      {
                          str += p.Name + ":" + address.country+","+address.province+","+address.city + ";";

}
                  }
              }
          }
          return str;
      }
  }

结果:”name:wangqilong;age:23;birthday:2018/9/15 0:00:00;isActive:True;address:china,anHui,bengBu;address:china,,shangHai;”

关于PropertyInfo类信息: https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.propertyinfo?view=netframework-1.1

来源:https://blog.csdn.net/qq_36330228/article/details/82715331

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com