Mar*_*rco 0 c# reflection unity-game-engine
简短的介绍
我想知道是否有.NET功能让我操作通过反射获得的值类型.因此,当在值类型属性上调用PropertyInfo.getValue(...)时,我希望不获取副本,而是原始对象并对其进行操作.
我不允许使用不安全的指针.
详细描述
出现这个要求是因为我正在实现一个让我操作Unity3d场景图的web服务.
场景图可能具有以下结构
客户端可以查询以下URI:
获取http://.../GameObject2/StructProperty/someProperty
这很简单,就像通过反射遍历层次结构一样简单,按名称搜索属性(例如Struct或Vector)并在相应的PropertyInfo上调用getValue,将其返回给客户端.
但是客户端也可以查询:
POST http://.../GameObject2/VectorProperty/xProperty ,例如5.4作为实体主体.然后,Vector的x属性应设置为5.4
我现在正在做的是向前遍历图形(就像使用GET一样)直到我找到Vector对象.然后我正在做一个递归的setValue UNTIL我在引用类型上做setValue,例如
object2.setValue(Vector.setValue(5.4));
(为简单起见,我省略了PropertyInfo部分.假设它在那里)
所以我必须能够查询包含值类型和引用类型的任意对象层次结构.对我正在做的事情有没有更好的方法?
因此,当在值类型属性上调用PropertyInfo.getValue(...)时,我希望不获取副本,而是原始对象并对其进行操作.
然后你需要访问该字段,而不是属性.或者,您需要调用getter来检索值的副本,修改副本,然后调用setter来更改包含对象的状态.
当你使用反射时,这不仅仅是真的 - 一般来说都是如此.你做不了类似的事情:
foo.Position.X = 10;
Run Code Online (Sandbox Code Playgroud)
where Position是属性,其类型是值类型.您将收到编译时错误.相反,你需要这样的东西:
var position = foo.Position;
position.X = 10;
foo.Position = position;
Run Code Online (Sandbox Code Playgroud)
你可以做到这一点与反思-假设有是一个二传手,当然.
请注意,当你说"原始对象"在这里,一个值类型(存储在该类型的字段,即不盒装)有是没有对象.只有值,作为另一个对象的一部分的字段.