2016-12-02 56 views
0

我從加載的程序集讀取類型:獲取包含在性能所有類型的某種類型的

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類中(也可能是其他類)?

+2

你是什麼意思「列入「?你的意思是你在尋找有這種類型參考的類嗎?順便說一下,我不能在你的例子中看到SomeType。 – HimBromBeere

+0

相反,'AddressesRevisionContainerId'類「包含」RevisionContainerId「,因爲它是父類。 'RevisionContainer'不需要知道(或「包含」)chilld-class。 –

+0

我從loadedAssemblies獲得someType,正如你所看到的,它的名字是「AddressesRevisionContainerId」。如果你看到這個類,你可以看到它是從「RevisionContainerId」類繼承的。而「RevisionContainerId」類是RevisionContainer類的屬性。 RevisionContainer類就是我正在尋找的(如果存在其他所有的話)。 – Simon

回答

0

只是遍歷類型的組件和檢查每一個類型的,如果它的任何屬性類型等於某種或者某些類型的子類的吧:

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

你爲什麼要「不同」呢?預計重複的類型? –

+0

我在「type => type.GetProperties」處得到錯誤 - 它說:「type.GetProperties(BindingFlags)」是一種在給定上下文中無效的方法。缺少():type.GetProperties() – Simon

+0

確實,'GetProperties'是一種方法。我假設這是某種僞代碼。所以可能會出現一些小錯字。你可能知道如何解決它們。你可以使用:'GetProperties(BindingFlags.Public)' –

相關問題