C#反射 - 设置属性值

时间:2016-07-13 14:47:03

标签: c# reflection properties

我试图在类中设置对象的属性,但错误显示Object does not match target type

FieldInfo dControl = window.GetType().GetField("dControl", BindingFlags.NonPublic | BindingFlags.Instance);
if (dControl == null) { Debug.Log ("dControl is null"); return;}

Type typeDC = dControl.FieldType;
PropertyInfo inPreviewMode = typeDC.GetProperty("InPreviewMode", BindingFlags.Public | BindingFlags.Instance);
if (inPreviewMode == null) { Debug.Log ("dControl.InPreviewMode is null"); return;}

bool value = false;
inPreviewMode.SetValue(dControl, value, null);

这是我试图访问的属性:

public class DControl : TimeArea
{
    public bool InPreviewMode
    {
        get
        {
            return dState.IsInPreviewMode;
        }
        set
        {
            if (cutscene != null)
            {
                ...
            }
        }
        dState.IsInPreviewMode = value;
    }
    ...
}

非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

SetValue的第一个参数是要为其设置值的实例。即,它期待DControl的实例 - 您的代码将其传递给FieldInfo的实例。

所以你可能必须通过反射得到那个实例:

DControl ctrl = (DControl)dControl.GetValue(window);

然后将其传递给设定值

inPreviewMode.SetValue(ctrl, value, null);