C#使用反射来创建一个结构体
发布时间:2020-12-15 18:27:19 所属栏目:百科 来源:网络整理
导读:我目前正在编写一些代码,以将通用对象保存到使用c#中的反射的 XML. 问题在于在一些对象中读回XML是结构体,我无法弄清楚如何初始化结构体.对于我可以使用的课程 ConstructorInfo constructor = SomeClass.GetConstructor(Type.EmptyTypes); 然而,对于一个结构
我目前正在编写一些代码,以将通用对象保存到使用c#中的反射的
XML.
问题在于在一些对象中读回XML是结构体,我无法弄清楚如何初始化结构体.对于我可以使用的课程 ConstructorInfo constructor = SomeClass.GetConstructor(Type.EmptyTypes); 然而,对于一个结构体,没有没有参数的构造函数,所以上面的代码将构造函数设置为null.我也试过 SomeStruct.TypeInitializer.Invoke(null) 但这会抛出一个memberaccessexception. Google没有任何有希望的命中.任何帮助将不胜感激. 解决方法
如果这些值是struct,它们可能是不可变的,所以你不想调用一个无参数的构造函数,而是将适当的值作为构造函数参数.
如果结构不是不可变的,那么尽可能快地远离它们,如果你可以…但是如果你绝对必须这样做,那么使用Activator.CreateInstance(SomeClass).当您使用反射来设置值类型的属性或字段时,您必须非常小心,但不要紧,您最终将创建一个副本,更改该副本上的值,然后将其丢弃.我怀疑,如果你整个工作一个盒装版本,你会没事的: using System; // Mutable structs - just say no... public struct Foo { public string Text { get; set; } } public class Test { static void Main() { Type type = typeof(Foo); object value = Activator.CreateInstance(type); var property = type.GetProperty("Text"); property.SetValue(value,"hello",null); Foo foo = (Foo) value; Console.WriteLine(foo.Text); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |