Как я могу найти свой тип недвижимости? - PullRequest
0 голосов
/ 14 октября 2011

У меня есть следующий код:

 public class EntityBase
{


 public virtual void Freez(EntityBase obj)
 {
    //TO DO

 }

Любой класс в моем примере наследуется от EntityBase;как это:

  public class Person:EntityBase
    {
       public Person()
       {
           this.PersonAsset = new Asset { Title = "asset1" };
       }
        public string Name { get; set; }
       public Asset PersonAsset{get;set;}


    }
   public class Asset : EntityBase
   {
       public string Title { get; set; }
   }

Я хочу, когда я вызываю person.Freez (), если person имеет свойство, являющееся классом, например PersonAsset.The метод PersonAsset Freez ();Я думаю, что я должен использовать отражение в методе EntityBase Freez (). Но когда я получаю свойство PersonAsset путем отражения, как я могу вызвать его метод Freez ()? Или Как я могу найти, что моя propertyinfo является классом?

1 Ответ

1 голос
/ 14 октября 2011
public virtual void Freez()
{
    foreach (var prop in this.GetType().GetProperties())
    {
        if (prop.PropertyType.IsClass && typeof(EntityBase).IsAssignableFrom(prop.PropertyType))
        {
            var value = (EntityBase) prop.GetValue(this, null);
            value.Freez();
        }

        if (typeof(ICollection).IsAssignableFrom(prop.PropertyType))
        {
            var collection = (ICollection)prop.GetValue(this, null);
            if (collection != null)
            {
                foreach (var obj in collection)
                {
                    if (obj is EntityBase)
                    {
                        ((EntityBase)obj).Freez();
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...