VB.net setValue给结构体赋值无效

impasse 2017-06-28 04:31:38


Public Structure objTest
Public TestField1 As String
Public TestField2 As String
End Structure

Sub TestGetSetValue()

Dim Test1 As objTest
Test1.TestField1 = "Value1"
Test1.TestField2 = "Value2"

For Each tempInfo As Reflection.FieldInfo In Test1.GetType.GetFields

MessageBox.Show(tempInfo.GetValue(Test1))
'Value1
tempInfo.SetValue(Test1, "newValue")
MessageBox.Show(tempInfo.GetValue(Test1))
'期待值“newValue",实际值”Value1“
Next

End Sub


请教一下,为什么上面的例子中SetValue为什么无效,GetValue都完全没问题啊
虽然这是一个非常简单的问题,但是已经折腾我这个小白很长时间了,我百度上都找过实在找不到答案,期望前辈赐教,非常感谢

...全文
804 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
impasse 2017-07-09
  • 打赏
  • 举报
回复
还有人回消息吗
  • 打赏
  • 举报
回复
执行 Test1.TestField1 = "Value1" 语句,是直接了当的。 反射,相信你懂是什么意思吧?反射是绕了一大圈,降低了数百倍性能,丧失了编译机制的直接了当特性,中间有无数的对象处理过程。这中间你对于引用类型对象这样处理(容忍上述问题存在)也就罢了,而对于 structure 对象处理你就必须面对你处理的是对象副本(而非原来的对象)的问题。人家 .net 机制本来就是如此。
  • 打赏
  • 举报
回复
跟属性还是字段没有关系。当你对 structure 对象反射,规范的(和公开的)反射方法实际上是在赋值时已经就是对结构体对象副本操作了。 规范的 .net 功能中并不支持你要的功能。所以不要使用 structure。就算是你觉得structure方便,那么要么你不要反射它,根本就不使用反射。
Tiger_Zhao 2017-06-30
  • 打赏
  • 举报
回复
(没复制全) 看答案的红字部分:这里建议用属性进行反射,而不要用Field进行反射。
Tiger_Zhao 2017-06-30
  • 打赏
  • 举报
回复
field.SetValue(model, value)出错了 看答案的红字部分“要用Field进行反射
impasse 2017-06-30
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
(没复制全) 看答案的红字部分:这里建议用属性进行反射,而不要用Field进行反射。
用field灵活性更大
impasse 2017-06-29
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
Structure是值类型,你要自己装拆箱再用setvalue
不好意思,请问可以具体点吗,我实在太菜了
xdashewan 2017-06-29
  • 打赏
  • 举报
回复
引用 7 楼 impasse 的回复:
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
有VB.NET的吗,没学过C#哈哈,你可能要抓狂了[/quote] 原理都是一样的,而且很多代码都共同的 看看这篇http://www.chengxuyuans.com/VB.NET/91810.html
impasse 2017-06-29
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 5 楼 impasse 的回复:] 不好意思,请问可以具体点吗,我实在太菜了
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html[/quote]有VB.NET的吗,没学过C#哈哈,你可能要抓狂了
xdashewan 2017-06-29
  • 打赏
  • 举报
回复
引用 5 楼 impasse 的回复:
不好意思,请问可以具体点吗,我实在太菜了
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
impasse 2017-06-28
  • 打赏
  • 举报
回复
是啊,用类可以,不过感觉结构体方便点
  • 打赏
  • 举报
回复
如果你使用 Structure,你会随随便便地就写出一堆会造成对象值整个复制的代码。本来可能你想象的是Structure简单、快,结果适得其反。 一般来说,避免使用 Structure 吧。
  • 打赏
  • 举报
回复
不论getvvalue还是setvalue,都是在值类型数据的副本上操作。 你如果想反射,就把struct 彻底忘记吧!
xdashewan 2017-06-28
  • 打赏
  • 举报
回复
Structure是值类型,你要自己装拆箱再用setvalue

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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