如何为反射变量添加值?

问题描述 投票:0回答:1

我想为我通过反思获得的价值增加价值。 += 不起作用,SetValue 不符合我的需求。 *

  • Instance.Field 确实存在,但这对我的脚本不利(出于原因)。

这是我的课:

public class OreMine : MonoBehaviour
{
    [SerializeField] string VariableName;

    void OnCollisionEnter2D(Collision2D col)
    {
        if(col.gameObject.tag == "Player")
        {
            var Value = typeof(Inventory).GetField(VariableName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
            Destroy(gameObject);
        }
    }
}

问题是我无法做到这一点:

Value += 1

这不符合我的需求:

public class OreMine : MonoBehaviour
{
valueField.SetValue(null, SomeInteger);
}

在 Microsoft 文档中,AddValue 似乎仅适用于字符串。

https://learn.microsoft.com/en-us/dotnet/api/system.runtime.serialization.serializationinfo.addvalue?view=net-8.0

c# unity-game-engine reflection field system.reflection
1个回答
0
投票

Value += 1
就是
Value = Value + 1
。如果您使用反射,则需要一个
GetValue
、从
object
到正确类型的转换、增量和
SetValue
(这将有一个隐式转换/框回到
object
) 。这与
AddValue
无关,这是一个序列化概念。

© www.soinside.com 2019 - 2024. All rights reserved.