public class Employee
    {
        private string name;
        private int id;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public int ID
        {
            get { return id; }
            set { id = value; }
        }  
    }
     protected void Test3()
        {
            Type myType = typeof(Employee);
            FieldInfo[] fi = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
            foreach (var r in fi)
            {
                MemberTypes mymembertyps = r.MemberType;   
                //我能找到这个r 对应的属性么?
            }
            PropertyInfo[] pi = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance); 
        }我们知道通过GetFields可以找到这个类的所有字段,通过GetProperties可以找到这个类的所有属性。
现在的问题是这样的,比如我在遍历字段集合的时候,能不能找到当前这个字段对应的属性?
或者遍历属性集合的时候,能不能找到当前属性对应的字段?
三思而后答。

解决方案 »

  1.   

    对应的属性: r.Name 即可
      

  2.   

    foreach (var r in fi)
                {
                    //MemberTypes mymembertyps = r.MemberType;
                    Response.Write(r.Name + "<br />");//字段对应的属性
                }
                PropertyInfo[] pi = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
                foreach (PropertyInfo o in pi)
                {
                    Response.Write(o.Name + "<br />");//属性对应的字段
                
                }
      

  3.   

    数组 查找 Rank 这个 属性。、集合 用 Item 这个属性。查找, 多看看 反射,
      

  4.   

    Field和Property本身并没有对应关系,只是一般生成的代码看起来像有对应关系
    public class Customer 
        { 
            private string name; 
            public string Name 
            { 
                get { return name; } 
                set
                { 
                    if(string.IsNullOrEmpty(name))throw new ArgumentException("Name cannot be blank","Name"); 
                    name = value; 
                } 
            } 
        }
      

  5.   

    查找字段对应的后备属性?这需要反射获得IL,然后反编译,再解析了。因为很多时候属性访问器是复杂的,看下面的代码:class Person
    {
        public int ID { get; set; }
        private string firstName;
        private string lastName;
        public string Name
        {
            get { return firstName + " " + lastName; }
            set { firstName = (value + " ").Split(' ')[0]; lastName = (value + " ").Split(' ')[1]; }
        }
        public string Profile
        {
            get 
            {
                DbContext db = new DbContext();
                return db.Users.SingleOrDefault(x => x.ID == ID).Profile;
            }
        }
        public int RandomNumber { get { return new Random().Next(0, 100); } set { } }
    }请你告诉我,这些属性的后备字段是什么?