none
得到实例化后的值 RRS feed

  • 问题

  • 您好,我的问题描述为下:

    namespace Class1
    
    {
    
      public class Class1
    
     {
    
      #region 构造函数
    
      public Class1()
    
      {
    
       //实例化字段
    
      }
    
      #endregion 
    
      #region 字段
    
      private string str1;
    
      private string str2;
    
      private string str3;
    
      private string str4;
    
      private string str5;
    
      #endregion
    
    
    
      #region 属性
    
      public string Str1
    
      {
    
       get;
    
       set;
    
      }
    
      public string Str1
    
      {
    
       get;
    
       set;
    
      }
    
      public string Str2
    
      {
    
       get;
    
       set;
    
      }
    
      public string Str3
    
      {
    
       get;
    
       set;
    
      }
    
      public string Str4
    
      {
    
       get;
    
       set;
    
      }
    
      public string Str5
    
      {
    
       get;
    
       set;
    
      }
    
      #endregion
    
     }}
    
    


    同时我有个测试类如下

    Class1 c2 = new Class1();
    
        Console.WriteLine(c2.Str1);
    
        Console.WriteLine(c2.Str2);
    
        Console.WriteLine(c2.Str3);
    
        Console.WriteLine(c2.Str4);
    
        Console.WriteLine(c2.Str5);

    显然上述的测试代码很繁杂,我只是想看看每一个字段是否被实例化了。

    我的问题为,有没简单的方法全部输出,Class1类中的字段(不是得到该字段的名字,而是得到该字段实例化后的值)谢谢~


    2011年7月26日 0:41

答案

  • 你好,使用反射,示例如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication5
    {
      class Program
      {
        static void Main(string[] args)
        {
          var obj = new Class1()
          {
            Str1 = "1",
            Str2 = "2",
            Str3 = "3",
            Str4 = "4",
            Str5 = "5",
          };
    
          var properties = obj.GetType().GetProperties();
    
          foreach (var p in properties)
          {
            Console.WriteLine(string.Format("Name:{0}, Value:{1}", p.Name, p.GetValue(obj, null)));
          }
    
          Console.ReadLine();
        }
      }
    
      public class Class1
      {
        public string Str1 { get; set; }
        public string Str2 { get; set; }
        public string Str3 { get; set; }
        public string Str4 { get; set; }
        public string Str5 { get; set; }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 elegantluo 2011年7月26日 2:02
    2011年7月26日 1:51
    版主

全部回复

  • 你好,使用反射,示例如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication5
    {
      class Program
      {
        static void Main(string[] args)
        {
          var obj = new Class1()
          {
            Str1 = "1",
            Str2 = "2",
            Str3 = "3",
            Str4 = "4",
            Str5 = "5",
          };
    
          var properties = obj.GetType().GetProperties();
    
          foreach (var p in properties)
          {
            Console.WriteLine(string.Format("Name:{0}, Value:{1}", p.Name, p.GetValue(obj, null)));
          }
    
          Console.ReadLine();
        }
      }
    
      public class Class1
      {
        public string Str1 { get; set; }
        public string Str2 { get; set; }
        public string Str3 { get; set; }
        public string Str4 { get; set; }
        public string Str5 { get; set; }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 elegantluo 2011年7月26日 2:02
    2011年7月26日 1:51
    版主
  • 谢谢肖哥:

    下面是我的答案,实例为:

    Class1 c1 = new Class1();
    
    Type type = c1.GetType();
            foreach (var item in type.GetProperties())
            {
              Console.WriteLine((string)type.InvokeMember((string)item.Name, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, c1, null));
            }
    
    

     

    • 已标记为答案 elegantluo 2011年7月26日 2:02
    • 取消答案标记 elegantluo 2011年7月26日 2:05
    2011年7月26日 2:02