在类C#的方法中迭代“ This”属性

时间:2018-07-15 23:22:59

标签: c# class methods instance

我一直在搜索,但是没有运气,我试图从数据库中的表中调用类中的方法,此方法将调用另一个找到条目并填充对象的方法,但是我想将此对象传递给我的实例

 public class ProductCategory
    {
        public int ProductCategoryID { get; set; }

        public string Name { get; set; }

        public Guid rowguid { get; set; }

        public DateTime ModifiedDate { get; set; }


        public void FindItem<T1>(T1 id)
        {
            try
            {

                var obj = Activator.CreateInstance(this.GetType());
                obj = Dal.ObjFind(obj, id); //this fill the object 
                //i want something like
                foreach properties in obj
                this.propertie = obj.propertie


            }
            catch (Exception e)
            {
                throw e;
            }

        }

    }

我可以像

那样调用该方法
ProductCategory test = new ProductCategory();
test.Find(1);

在加载完我的对象之后,我将非常感谢您提供的任何帮助,对于英语不好,或者如果我无法清楚解释的问题,我们表示歉意

致谢

2 个答案:

答案 0 :(得分:1)

好吧,我找到了一种方法来实现,如Pac0所说,您可以这样做

public  void FindItem<T1>(T1 id)
        {
            try
            {

                var obj = this;
                // fill the object with the DB data
                obj = Dal.ObjFind(new Production.ProductCategory(), id);

                PropertyDescriptorCollection PropertyObj = 
                 TypeDescriptor.GetProperties(this);
                //iterating the properties in the instance of the class
                foreach (PropertyDescriptor prop in PropertyObj)
                {
                    //Get the value for each properties in the filled Obj
                    //and set that value for each properites in "this"
                    prop.SetValue (this,prop.GetValue(obj));
                }



            }
            catch (Exception e)
            {
                throw e;
            }

        }

那样,您可以像“ test.FindItem(1)”那样调用设备,对象将被加载,谢谢!

答案 1 :(得分:0)

要在运行时获取有关某些类durig运行时的信息称为* reflection **(该术语应有助于您的搜索)

要获取类型的所有属性,可以使用Type.GetProperties()

也看一下GetProperty

有了这个,您应该能够实现您想要的。

但是,我不认为这是最简单的方法。可能有人会想出更好的方法来解决您的根本问题。