通过反射,我可以得到值,但是如何赋值呢?

plglenn1 2009-06-13 01:33:14
//反射

下面是我项目中的一个函数,我先解释吧

protected override void InfoNotify(string v_Tag/*这是一个变量的名称*/)
{
string v_TagValue;/*这个东西我打算来接受变量的值*/
FieldInfo myFieldInfo = typeof(CatchEnterprise/*这是一个类*/).GetField(v_Tag);
v_TagValue = myFieldInfo.GetValue(this).ToString();

}
protected override void InfoNotify(string v_Tag)
{
string v_TagValue;
FieldInfo myFieldInfo = typeof(CatchEnterprise).GetField(v_Tag);
v_TagValue = myFieldInfo.GetValue(this).ToString();

}

举个例子,
InfoNotify("name");name 是我的一个变量,
加入name="billgate"
那么就得到 v_TagValue =“billgate”;

上面的函数得到值是没有问题的,可是我要给它设置值该如何写呢?
myFieldInfo.GetValue(this)="billbush";//不能赋值
比如我要个变量赋值为billbush 上面的语句肯定是错的。





how to set value ,by reflection????????????????
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sysping1 2009-06-13
  • 打赏
  • 举报
回复
SetValue
wuyq11 2009-06-13
  • 打赏
  • 举报
回复
class B {
private int x;
public int X {
get { return x; }
set { x = value; }
}
}
class A {
private B _b;
public B b {
get { return _b; }
set { _b = value; }
}
}
static void SetValue(Object obj, string str, object value) {
object temp = obj;
object key = null;
PropertyInfo values = null;
string[] strs = str.Split('.');
int length = strs.Length;
if (length > 1) {
for (int i = 0; i < length; i++) {
key = temp;
PropertyInfo propinfo = temp.GetType().GetProperty(strs[i]);
object o = temp.GetType().InvokeMember(strs[i], BindingFlags.GetProperty, null, temp, null);
if (o == null) {
return;
}
temp = o;
if (i == length - 2) {
values = propinfo;
}
}
}
else {
}
values.SetValue(key, value, null);
}
static void Main(string[] args) {
A a = new A();
B b = new B();
b.X = 1000;
a.b = b;

Type t = a.GetType();
PropertyInfo propinfo=t.GetProperty("b");
object o = t.InvokeMember("b", BindingFlags.GetProperty, null, a, null);
if (o != null) {
PropertyInfo propinfo2 = o.GetType().GetProperty("X");
propinfo2.SetValue(o, 1000000, null);
propinfo.SetValue(a, o, null);
}
SetValue(a, "b.X", 1233);
Console.Write(a.b.X);
Console.ReadLine();
}

yuqingjiang 2009-06-13
  • 打赏
  • 举报
回复
你修改的不是引用,而是复制后的值。当然不成功。
zgke 2009-06-13
  • 打赏
  • 举报
回复
myFieldInfo.SetValue(this,"billgate");

62,250

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧