值類型的實例,我要像創建值類型的實例,System.String
System.Boolean
,System.Int32
,等我拿到的類型合格的名字,如System.String
或MyNamespace.Employee
,我要創造一個實例並返回。我使用Activator.CreateInstance
和FormatterServices.GetUninitializedObject
來創建實例。但在價值類型的情況下它失敗。在值類型的情況下,我不能硬編碼邏輯。我需要一種通用的方法來創建值類型和引用類型的實例。如何創建使用反射
如何創建使用反射
回答
你究竟想要做什麼?主要使用FormatterServices.GetUninitializedObject
作爲序列化代碼;除此之外,你不應該真的使用它。這聽起來像你可能只需要像TypeConverter
,即(這些類型)
TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
感謝它的幫助。 – 2010-01-04 06:40:37
哦,可愛的通用的東西:) – Nyerguds 2018-02-15 21:54:44
到底是什麼故障?我想下面的代碼,看看是否有與值類型的問題:
var instance = Activator.CreateInstance(typeof(Int32));
它給了我一個Int32實例設置爲0。
究竟哪裏是你的代碼失敗?否則,我會說問題在於你加載類型的方式,而不是你創建實例的方式。
Eish哈科!我剛剛回去將'var'改爲'int',以防OP中不熟悉'var',並且你偷偷在與我完全相同的代碼行中。 :-) – ProfK 2010-01-04 06:36:36
哈哈 - 你必須快速抽籤:-) – 2010-01-04 07:00:36
這個工作對我來說:
int x = (int)Activator.CreateInstance(typeof (Int32), true);
對於BCL值類型(以及使用字符串時描述的類型),確保不使用C#的關鍵字,並確保該類型與命名空間完全合格。例如,C#INT成功創建這種方式與Activator.CreateInstance(..)
object num = Activator.CreateInstance(Type.GetType("System.Int32"));
如果您嘗試使用特定語言的別名一樣"int"
或短格式,如:"Int32"
你將得到一個失敗的嘗試。
- 1. 如何使用反射來創建一個「反射機器」
- 2. 創建反射Opengl
- 3. 使用Java反射創建對象
- 4. 使用反射創建MustOverride屬性?
- 5. 使用反射創建HttpPostedFile的實例
- 6. 如何動態創建使用反射的通用C#對象?
- 7. 如何使用反射包從類路徑創建對象
- 8. 如何避免使用反射來創建一個新實例
- 9. 如何使用ImageMagick創建反射效果?
- 10. 如何使用帶Moq參數的反射來創建模擬?
- 11. 如何使用java反射創建protobuf實例?
- 12. 如何使用反射創建基於lambda的委託?
- 13. 如何使用反射值創建OrderBy語句?
- 14. 創建使用反射來創建對象
- 15. 創建通過反射
- 16. 如何使用反射在C#文件中創建列表<T>實例使用反射
- 17. 如何使用反射
- 18. 如何使用反射
- 19. 如何使用Java反射
- 20. 如何使用反射
- 21. 如何使用反射
- 22. 如何使用反射
- 23. 如何使用反射
- 24. 如何使用反射
- 25. 爪哇 - 反思 - 如何使用反射
- 26. 使用「新」關鍵字創建的對象並使用反射創建對象
- 27. 如果通過使用反射創建對象,那麼獲取?
- 28. 使用反射在使用xmlbeans時創建實例
- 29. 如何用反射建立AlertDialog?
- 30. 如何用反射創建比較器類?
System.String是引用類型,而不是值類型。 – 2010-01-04 06:30:55