C# 用变量名的字符串 更改对应变量的值

C#代码如下:TypemyTypeA=typeof(common_setting);FieldInfomyFieldInfo=myTypeA.GetField(words... C#代码如下:
Type myTypeA = typeof(common_setting);
FieldInfo myFieldInfo = myTypeA.GetField(words[0]);
myFieldInfo.SetValue(CommonSetting, words[1]);

其中common_setting为一个结构体,CommonSetting是其一个实例,words[0]是一个字符串,保存的是结构体中元素(字符串型变量)的名字,words[1]中为对应变量的字符串值,为何执行过程不报错也不更改CommonSetting中元素的值呢????

求大神帮忙
展开
 我来答
百度网友16ad9e1
推荐于2018-04-23 · TA获得超过774个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:505万
展开全部

struct 是传值调用 所以

myFieldInfo.SetValue(CommonSetting, words[1]); 这里有一个隐含的copy动作, 值实际上是被赋给了copy出的另外一个实例


所以使用反射的方式复制给struct的时候 先装箱一下, 看如下例子


狮是搞完泪18
2013-04-23 · TA获得超过270个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:258万
展开全部
CommonSetting里面的那个变量是静态变量么?
追问
不是的
public struct common_setting {
public string image_basepath;
public string calibresult_path;
public string setting_path;
public string applicationbase_path;
}

public common_setting CommonSetting=new common_setting();
结构体的定义在类的外部,CommonSetting实例在类的内部
追答
调用GetField方法时,加上这个参数试试System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public
首先确认一下myFieldInfo这个变量是不是正确的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式