Как определить, принадлежит ли член выражения к типу коллекции, а затем выполнить итерацию по этой коллекции? - PullRequest
1 голос
/ 23 февраля 2012

примеры классов:

public class Procedure: SomeBaseClass
{
     public Guid Id {get;set;}
     public ICollection<Task> Tasks {get;set;}

}

public class Task: SomeBaseClass
{
     public Guid Id {get;set;}
     public string Name {get;set;}
}

Метод, используемый в выражении colelction:

public viod DoSomethingWithProperties<T>(Guid enittyId, params Expression<Func<TEntity, object>>[] propertiesToDoStuffWith) where T: SomeBaseClass
{
   var item = someService<T>().FindById(entityId);
   .......

   foreach(var expression in propertiesToDoStuffWith)
   {
     ///I need to iterate the propertiesToDetach and determine if the property is a collection so I can perform operations on each item.
   }

}

Я могу назвать это так:

DoSomethingWithProperties<Procedure>(1111-1111-1111-1111-1111,p => p.tasks);

1 Ответ

1 голос
/ 23 февраля 2012

Определите type после компиляции Expression, используя ключевое слово is.

foreach(var expression in propertiesToDoStuffWith)
{
     var result = expression.Compile()(item);

     if (result is ICollection){
          // handle collection type
     }
     else {
          // some other type
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...