2011-09-27 17 views
0

我想使用反射來初始化以下程序集中從EntityBase類繼承的類。無法從GetTypes中獲取所選類型

我猜lambda表達式是正確的,但我不知道如何從types2得到那些2類(在組件中有2類繼承EntityBase)。

Assembly a = Assembly.LoadFrom("X:\\Workspace\\Operations\\ItemSupplierSetupRequest\\Main\\Source\\ItemSupplierSetupRequest.Entity\\bin\\Debug\\xxxx.ItemSupplierSetupRequest.Entity.dll"); 
IEnumerable<Type> types2 = 
    a.GetTypes().Where(x => x.BaseType.ToString().Equals("xxxx.ItemSupplierSetupRequest.Entity.EntityBase")); 

我也試過

var result = 
    a.GetTypes().Where(x => x.BaseType.FullName.Equals("xxxx.ItemSupplierSetupRequest.Entity.EntityBase")); 

,但不知道如何使用或檢查,如果這個返回的2班?

回答

3

您的查詢應該可能工作。但是不需要使用Equals()或使用字符串比較類型。你可以使用(假設EntityBase是一個引用的程序集和它的名稱空間是在using):

a.GetTypes().Where(x => x.BaseType == typeof(EntityBase)) 

請記住,這將不會返回從EntityBase繼承的所有類型,只有那些從它繼承直接

+0

感謝您的回答 - 但我不知道如何使用Activator.CreateInstance實例化對象從IEnumerable types2或var我試過的結果?任何線索?此外,我不知道如何檢查我的查詢是否返回正確的結果 - ofcourse我無法調試lambda表達式。謝謝! – kulNinja

+0

如果您還有其他問題,請提出另一個問題,以便將來有相同問題的其他人可以找到它。你可以調試lambda的結果。在VS調試器中,您可以單擊「結果視圖」。 – svick