gpt4 book ai didi

C# 使用反射创建结构

转载 作者:可可西里 更新时间:2023-11-01 07:54:18 24 4
gpt4 key购买 nike

我目前正在编写一些代码,使用 C# 中的反射将一般对象保存到 XML。

问题是在某些对象中读取 XML 时是结构,我不知道如何初始化该结构。对于我可以使用的类(class)

ConstructorInfo constructor = SomeClass.GetConstructor(Type.EmptyTypes);

但是,对于一个结构体,没有不带参数的构造函数,所以上面的代码将构造函数设置为 null。我也试过了

SomeStruct.TypeInitializer.Invoke(null)

但这会抛出一个成员访问异常。谷歌没有给出有希望的命中率。任何帮助将不胜感激。

最佳答案

如果值是结构,它们可能是不可变的 - 因此您不想调用无参数构造函数,而是调用将适当值作为构造函数参数的构造函数。

如果结构不是不可变的,那么尽可能快地逃离它们,如果可以...但是如果你绝对必须这样做,然后使用 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);
}
}

关于C# 使用反射创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com