获取类的所有成员的集合



我想获得类中存在的所有成员的集合。我怎么做呢?我正在使用下面的代码,但是它给了我许多额外的名字和成员。

Type obj  =  objContactField.GetType();
MemberInfo[] objMember = obj.GetMembers();
String name = objMember[5].Name.ToString();

获取一个类的所有属性及其值的集合:

class Test
{
    public string Name { get; set; }
}
Test instance = new Test();
Type type = typeof(Test);
Dictionary<string, object> properties = new Dictionary<string, object>();
foreach (PropertyInfo prop in type.GetProperties())
    properties.Add(prop.Name, prop.GetValue(instance));

注意,您需要添加using System.Collections.Generic;using System.Reflection;以使示例工作。

从msdn中,类的成员包括:

字段

Constants(位于Fields下)

属性

方法

事件

操作符

索引器(在属性下)

构造函数

析构函数嵌套类型

当你在一个类上做GetMembers时,你会得到这个类的所有这些(包括在类上定义的静态的,比如static/const/operator,更不用说实例的了)和它继承的类的实例成员(没有基类的static/const/operator),但不会复制被覆盖的方法/属性。

要过滤掉,您有GetFields, GetProperties, GetMethods,并且为了更大的灵活性,有FindMembers

嗯,这有点取决于你得到什么。例如:

   static void Main(string[] args)
    {
        Testme t = new Testme();
        Type obj = t.GetType();
        MemberInfo[] objMember = obj.GetMembers();
       foreach (MemberInfo m in objMember)
       {
           Console.WriteLine(m);
       } 
    }

    class Testme
    {
        public String name;
        public String phone;
    }

返回
System.String ToString()
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
Void .ctor()
System.String name
System.String phone

这正是我所期望的,记住,仅仅因为你的类从某处继承,默认情况下会提供其他的东西。

Linqpad演示程序

为了便于理解dknaack代码的作用,我创建了一个linqpad演示程序

void Main()
{
   User instance = new User();
   Type type = typeof(User);
   Dictionary<string, object> properties = new Dictionary<string, object>();
   foreach (PropertyInfo prop in type.GetProperties())
         properties.Add(prop.Name, prop.GetValue(instance));
   properties.Dump();    
}
// Define other methods and classes here        
class User
{
    private string foo;
    private string bar { get; set;}
    public int id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public System.DateTime Dob { get; private set; }
    public static int AddUser(User user)
    {    
        // add the user code
        return 1;
    }
}

相关内容

  • 没有找到相关文章

最新更新