值类型的实例,我要像创建值类型的实例,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