获取属性中包含的某些类型的所有类型

时间:2016-12-02 14:14:43

标签: c# reflection

我从已加载的程序集中读取类型:

var someType = loadedAssemblies
 .Where(a => a != null && a.FullName.StartsWith("MY."))
 .SelectMany(a => a.GetTypes())
 .Distinct()
 .ToArray()[0];

类型名称是" AddressesRevisionContainerId"。

现在我有这2个课程:

public class RevisionContainer {
  public RevisionContainer(RevisionContainerId revisionContainerId)
  {
    this.RevisionContainerId = revisionContainerId;
  }

  public virtual RevisionContainerId RevisionContainerId { get; private set;}
}

public class AddressesRevisionContainerId : RevisionContainerId
{}

如果你有someType,你怎么能找到包含这种类型的所有类? 例如,我如何找到类型" SomeType"它包含在RevisionContainer类中(可能还有其他类)?

1 个答案:

答案 0 :(得分:0)

只需遍历程序集中的类型并检查每种类型,如果它的任何属性类型等于某种类型,或者某些类型是它的子类:

var typesThatHasSomeTypeAsProperty = 
    assemblies.SelectMany(assembly => 
      assembly.GetTypes().Where(type => 
        type.GetProperties().Any(property => 
          property.PropertyType == someType || someType.IsSubclassOf(property.PropertyType)))).ToList();