如何获取和设置可能是另一个对象的 属性 的对象的 属性?

How to get and set property of an object which might be property of another object?

我有一个名为 myConstraint 的对象,它 可能 有一个名为 Parameter 的 属性。

Parameter 是一个具有 Name 属性 类型字符串的对象。

我想检查 Constraint 如果它有 属性 Parameter 获取字符串 Parameter.Name 如果它等于 "Length" 设置Constraint.ParametermyLengthParameter.

的值

我不能使用 Constraint.Parameter,因为编译器不知道对象是否有 属性 参数,直到程序为 运行。我尝试使用反射,但我无法弄清楚。非常感谢您的帮助。

使用 is 检查实例类型,然后将对象转换为 Constraint 类型。 (参考J3soon的评论)

if (myConstraint is Constraint)
{
   // cast and perform your operations here
}

是的,您可以使用反射来做到这一点。

因为constraint变量可以有任何值,所以你可以做类似的事情。

var property = constraint.GetType().GetProperty("Parameter"); 

if (property != null)
{
    var parameter = property.GetValue(constraint);
    if (parameter != null)
    {
        var parameterName = parameter.GetType().GetProperty("Name").GetValue(parameter).ToString();
        if (parameterName == "Length")
        {
            property.SetValue(constraint, myLengthParameter);
        }
    }        
}