获取班级所有成员的集合

时间:2011-07-21 09:14:17

标签: c# reflection member

我想获得课堂上所有成员的集合。我怎么做?我使用以下内容,但它给了我许多额外的名字和成员。

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

5 个答案:

答案 0 :(得分:9)

如果您想要所有属性和值的集合,请执行以下操作:

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;才能使示例正常工作。

答案 1 :(得分:5)

来自msdn,班级成员包括:

Fields

Constants(来自字段)

Properties

Methods

Events

Operators

Indexers(属于属性)

Constructors

Destructors

Nested Types

当你对一个类执行GetMembers时,你会得到该类的所有这些(包括在类上定义的静态类似静态/ const /运算符,更不用说实例了)和该类的实例成员它继承的类(没有基类的静态/ const /运算符),但不会复制重写的方法/属性。

要过滤掉,您有GetFieldsGetPropertiesGetMethods,为了获得更大的灵活性,有FindMembers

答案 2 :(得分:3)

嗯,这取决于你得到的东西。例如:

   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

这是我的预期,记住,只是因为你的类继承自某个地方,默认情况下还提供其他东西。

答案 3 :(得分:2)

代码看起来正确。你获得的额外名称是从基类继承的成员吗?

答案 4 :(得分:0)

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;
    }
}