如何确定表达式成员是否属于集合类型,然后对该集合进行迭代

本文关键字:集合 然后 迭代 集合类 表达式 何确定 成员 是否 属于 类型 | 更新日期: 2023-09-27 18:25:39

示例类:

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

表达式集合的获取方法:

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

如何确定表达式成员是否属于集合类型,然后对该集合进行迭代

使用is关键字编译Expression后,确定type

foreach(var expression in propertiesToDoStuffWith)
{
     var result = expression.Compile()(item);
     if (result is ICollection){
          // handle collection type
     }
     else {
          // some other type
     }
}