SetValue

skywolfY 2009-12-15 08:53:08


//stcTmp 是个结构体

public struct stc1
{

public string sTable;

public string sColumn;

public stcColumn(int n)
{
sTable = "";
sColumn = "";

}
}
stc1 stcTmp =new stc1(0);
foreach (FieldInfo fiTmp in stcTmp.GetType().GetFields())
{
if (fiTmp != null)
{
fiTmp.SetValue(stcTmp, "aaa");
}
}

这句 fiTmp.SetValue(stcTmp, "aaa")无效,请问各位高手哪里错了?
...全文
314 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skywolfY 2009-12-15
  • 打赏
  • 举报
回复
多谢各位
zhujiazhi 2009-12-15
  • 打赏
  • 举报
回复
此方法将 value 分配给此实例在 obj 对象上反映的字段。如果该字段是静态的,则将忽略 obj。对于非静态字段,obj 应是继承或声明该字段的类的实例
zhujiazhi 2009-12-15
  • 打赏
  • 举报
回复
stc1 stcTmp = new stc1();
object obj = stcTmp;
foreach (FieldInfo fiTmp in stcTmp.GetType().GetFields())
{
if (fiTmp != null)
{
fiTmp.SetValue(obj, "aaa");
}
}
stcTmp = (stc1)obj;
我姓区不姓区 2009-12-15
  • 打赏
  • 举报
回复
因为stc1是个struct,是值类型,SetValue方法由于没有ref或者out关键字,所以是按值传递的,到了SetValue方法的内部就用一个stc1的副本来进行赋值,所以更改不会影响到stcTmp,可以这样修改:

stc1 stcTmp = new stc1(0);
object o = stcTmp;
foreach (FieldInfo fiTmp in stcTmp.GetType().GetFields())
{
if (fiTmp != null)
{
fiTmp.SetValue(o, "aaa");
}
}
stcTmp = (stc1)o;
Console.WriteLine(stcTmp.sColumn);


或者把stc1改为class
skywolfY 2009-12-15
  • 打赏
  • 举报
回复
哥哥你的方法对于一般的可以,结构体,不知道有没有试过。
wuyq11 2009-12-15
  • 打赏
  • 举报
回复
int i = 1;
foreach(FieldInfo var in a.GetType().GetFields(BindingFlags.NonPublic)) {
if (var.DeclaringType == typeof(int))
{
var.SetValue(a, i);
}
}

private object Set(object o)
{
FieldInfo[] fields =o.GetType().GetFields();
Type t=o.GetType();
if(fields[0].FieldType.ToString()=="System.Int32 ")
{
fields[0].SetValue(o,i);
}
return o;
}
tianliang1 2009-12-15
  • 打赏
  • 举报
回复
帮顶。。。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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