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都完全没问题啊
虽然这是一个非常简单的问题,但是已经折腾我这个小白很长时间了,我百度上都找过实在找不到答案,期望前辈赐教,非常感谢
14 个解决方案
#1
Structure是值类型,你要自己装拆箱再用setvalue
#2
不论getvvalue还是setvalue,都是在值类型数据的副本上操作。
你如果想反射,就把struct 彻底忘记吧!
你如果想反射,就把struct 彻底忘记吧!
#3
如果你使用 Structure,你会随随便便地就写出一堆会造成对象值整个复制的代码。本来可能你想象的是Structure简单、快,结果适得其反。
一般来说,避免使用 Structure 吧。
一般来说,避免使用 Structure 吧。
#4
是啊,用类可以,不过感觉结构体方便点
#5
不好意思,请问可以具体点吗,我实在太菜了
#6
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
#7
有VB.NET的吗,没学过C#哈哈,你可能要抓狂了
#8
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
原理都是一样的,而且很多代码都共同的
看看这篇http://www.chengxuyuans.com/VB.NET/91810.html
#10
(没复制全)
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
#11
(没复制全)
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
#12
还有人回消息吗
#13
跟属性还是字段没有关系。当你对 structure 对象反射,规范的(和公开的)反射方法实际上是在赋值时已经就是对结构体对象副本操作了。
规范的 .net 功能中并不支持你要的功能。所以不要使用 structure。就算是你觉得structure方便,那么要么你不要反射它,根本就不使用反射。
规范的 .net 功能中并不支持你要的功能。所以不要使用 structure。就算是你觉得structure方便,那么要么你不要反射它,根本就不使用反射。
#14
执行 Test1.TestField1 = "Value1" 语句,是直接了当的。
反射,相信你懂是什么意思吧?反射是绕了一大圈,降低了数百倍性能,丧失了编译机制的直接了当特性,中间有无数的对象处理过程。这中间你对于引用类型对象这样处理(容忍上述问题存在)也就罢了,而对于 structure 对象处理你就必须面对你处理的是对象副本(而非原来的对象)的问题。人家 .net 机制本来就是如此。
反射,相信你懂是什么意思吧?反射是绕了一大圈,降低了数百倍性能,丧失了编译机制的直接了当特性,中间有无数的对象处理过程。这中间你对于引用类型对象这样处理(容忍上述问题存在)也就罢了,而对于 structure 对象处理你就必须面对你处理的是对象副本(而非原来的对象)的问题。人家 .net 机制本来就是如此。
#1
Structure是值类型,你要自己装拆箱再用setvalue
#2
不论getvvalue还是setvalue,都是在值类型数据的副本上操作。
你如果想反射,就把struct 彻底忘记吧!
你如果想反射,就把struct 彻底忘记吧!
#3
如果你使用 Structure,你会随随便便地就写出一堆会造成对象值整个复制的代码。本来可能你想象的是Structure简单、快,结果适得其反。
一般来说,避免使用 Structure 吧。
一般来说,避免使用 Structure 吧。
#4
是啊,用类可以,不过感觉结构体方便点
#5
Structure是值类型,你要自己装拆箱再用setvalue
#6
不好意思,请问可以具体点吗,我实在太菜了
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
#7
不好意思,请问可以具体点吗,我实在太菜了
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
#8
看看这文章http://www.cnblogs.com/dabiaoge/p/4112581.html
原理都是一样的,而且很多代码都共同的
看看这篇http://www.chengxuyuans.com/VB.NET/91810.html
#9
#10
(没复制全)
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
#11
(没复制全)
看答案的红字部分: 这里建议用属性进行反射,而不要用Field进行反射。
#12
还有人回消息吗
#13
跟属性还是字段没有关系。当你对 structure 对象反射,规范的(和公开的)反射方法实际上是在赋值时已经就是对结构体对象副本操作了。
规范的 .net 功能中并不支持你要的功能。所以不要使用 structure。就算是你觉得structure方便,那么要么你不要反射它,根本就不使用反射。
规范的 .net 功能中并不支持你要的功能。所以不要使用 structure。就算是你觉得structure方便,那么要么你不要反射它,根本就不使用反射。
#14
执行 Test1.TestField1 = "Value1" 语句,是直接了当的。
反射,相信你懂是什么意思吧?反射是绕了一大圈,降低了数百倍性能,丧失了编译机制的直接了当特性,中间有无数的对象处理过程。这中间你对于引用类型对象这样处理(容忍上述问题存在)也就罢了,而对于 structure 对象处理你就必须面对你处理的是对象副本(而非原来的对象)的问题。人家 .net 机制本来就是如此。
反射,相信你懂是什么意思吧?反射是绕了一大圈,降低了数百倍性能,丧失了编译机制的直接了当特性,中间有无数的对象处理过程。这中间你对于引用类型对象这样处理(容忍上述问题存在)也就罢了,而对于 structure 对象处理你就必须面对你处理的是对象副本(而非原来的对象)的问题。人家 .net 机制本来就是如此。