在与数据库打交道过程中,结构体数据类型应用的比较多,比如一个表的字段集合就可以设置为一个结构体,通过读取动态数据来实时更改结构体的值。
但是,通过C#的反射来修改结构体的值,在VS Studio 2015上会报错,而在VS Studio 2022上却不会报错,但是没有正确修改结果。
通过查询资料,这个是C#的一个BUG,在于装箱和拆箱过程中的问题,但是通过反射动态修改对象的属性值是可以的,这样就需要中间转换一个,就是在修改前,将结构体转换为对象,修改完再强制转换回来。
BaseClass.cs定义:
class BaseClass
{
public struct TableInfo
{
public string FieldNameCN;
public string FieldNameEN;
public string FieldType;
public int FieldLong;
}
}
引用:
using System.Reflection;
装箱:object TempObj = TI_B;
拆箱:TI_B = (BaseClass.TableInfo)TempObj;