在动态 ExpandoObject() 中存储指向 Vector3 的 C# 引用或指针?

Storing a c# reference or pointer to a Vector3 in a dynamic ExpandoObject()?

我有一个 class Player() 实例化 public Vector3 属性 AimTargetPos:

//Player.cs
private Vector3 aimTargetPos;
public Vector3 AimTargetPos => aimTargetPos;

在特定条件下,AimTargetPos 每帧更新一个新值。在另一个 class 中,AimTargetPos 按值存储在动态 ExpandoObject() 中作为 payload.aimTargetPos,然后作为参数传递给调用的函数 Enter(dynamic payload).

由于 Player.AimTargetPos 仍在每帧更新,因此 payload.aimTargetPos 将仅在创建并传递到 Enter() 的同一帧中具有正确的 Vector3 值。我需要能够将 aimTargetPos 分配给本地 ref 或指针变量,这样我就可以在第一帧之后继续使用有效负载中的 aimTargetPos。但是,我还没有找到在动态 ExpandoObject 负载中存储对 Player.AimTargetPos 的引用的方法。

有一些我不想求助的 hacky 解决方案:

根据 this question 的说法,没有一种单一的方法可以做到这一点,但听起来确实有多种选择。如果我不能在动态对象中保存引用,那么也许我可以存储 Player.AimTargetPos 的地址,并在 Enter() 中接收到有效负载后使用该地址创建引用或指针?但这似乎是一种不必要的深奥方法。有没有更简单的方法来实现这个?

首先我要问,为什么需要使用 ExpandoObject?

根据我使用类型化对象的经验,99.9% 的时间是一个非常好的解决方案(而且更简洁)。

话虽如此,您可以执行以下操作:

  1. 在您的 EO 中存储一个委托成员,returns 目标

expando.playerTarget = (Func<Vector3>) (() => { return player.aimTarget; });

  1. 将数据包装在 class 对象中并改为传递它

我个人的建议是尽可能避免使用动态。