C#使用反射来创建一个结构体

我目前正在编写一些代码,以将通用对象保存到使用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);
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...