我有一個只有類名的字符串列表。我需要使用Activator創建它們的實例,但所有這些實例都可以位於不同的命名空間中。類可以在未來移入另一個名稱空間,所以我無法對其進行硬編碼。如何在.net內核中使用反射來查找類的名稱空間?
回答
如果你知道你永遠不會有多種類型與居住在不同的命名空間相同的名稱,你可以遍歷在組件和過濾器的類型名稱的所有類型。例如,這個工程:
var typenames = new[] { "String", "Object", "Int32" };
var types = typeof(object).GetTypeInfo().Assembly
.GetTypes()
.Where(type => typenames.Contains(type.Name))
.ToArray(); // A Type[] containing System.String, System.Object and System.Int32
這不一定會打破,如果你有多種類型具有相同的名稱,但你會得到所有的人都在列表中。
它不適用於.Net核心。 'Assembly沒有GetAssembly的定義.' – MKasprzyk
它可以工作,但你可能需要添加一個框架程序集依賴項到你的project.json。給我幾分鐘,我會看看我能弄清楚哪一個。 –
@MKasprzyk與網絡核心,你可以使用'typeof(object).GetTypeInfo()。Assembly'來獲得程序集。 –
你可以得到所有類型的組件,並找到一個有問題的名稱。
var type = assembly.GetTypes().FirstOrDefault(x => x.Name == name);
注意:名稱可能不是唯一的。在這種情況下,除非對命名空間8e.g有一些猜測,否則你沒有機會找到正確的類型。可能的命名空間的列表,命名空間等的「黑名單」)
- 1. 使用反射(DotNET)在程序集中查找所有名稱空間
- 2. C#/ .NET如何從類名中找到包含名稱空間
- 3. 如何使用反射來查找類中使用的ArrayLIst的類成員名稱,例如?
- 4. Python:使用反射來從類名稱中調用類成員
- 5. 名稱空間'System'中不存在類型或名稱空間名稱'Net'
- 6. 如何查找.NET名稱空間的程序集名稱,例如Microsoft.WindowsAzure.ServiceRuntime
- 7. 如何在PHP 5.3 +中使用名稱空間類內的全局名稱空間類型提示?
- 8. 如何在java中使用反射來查找Collection的大小?
- 9. 如何使用.Net中的XElements使用短名稱空間?
- 10. 如何通過反射在PHP 5.6中獲取屬性類名稱空間
- 11. 如何在WinDbg中查找內存映射文件的名稱?
- 12. 如何使用Scala反射來查找自我類型特徵?
- 13. 如何使用XmlPullParser來確定Android名稱空間的名稱?
- 14. 如何在Doctrine2 targetEntity映射中使用不同的名稱空間類
- 15. 在PHP中的命名空間反射
- 16. 如何在包中使用反射來查找包含main方法的類?
- 17. 如何在Java中使用反射來實例化內部類?
- 18. 使用反射從ASP.NET模板代碼隱藏類中獲取名稱空間?
- 19. 類型或命名空間名稱 'FormatterContext' 無法找到.NET 4.5
- 20. 查找Jar名稱使用類名稱
- 21. .net - 通過反射從特定命名空間的類中調用方法
- 22. 如何在名稱空間的類文件中使用
- 23. C#在每個反射的名稱空間中獲取類的列表
- 24. 類中找不到名稱空間
- 25. 在PHPUnit中使用名稱空間時找不到類'
- 26. 使用@XmlJavaTypeAdapter映射映射時的JAXB和空名稱空間
- 27. 通過在python中使用類來減少名稱空間
- 28. 在名稱空間內添加使用
- 29. 如何使用反射獲得泛型類的名稱?
- 30. TypeScript:如何在名稱空間內使用內部接口
你鎖定在具有'string'的列表,或者你可以有'Type',而不是一個列表?如果你只有'字符串',你想如何處理多於一種類型(使用不同名稱空間)的情況? –
不幸的是我被鎖定了。類的列表來自文本文件,我需要創建適當的對象。 – MKasprzyk
一定要檢查出這個線程以及:如何獲取命名空間中的所有類?(https://stackoverflow.com/questions/949246/how-to-get-all-classes-within-namespace/949285# 949285) –